当contenteditable Elements使用Angular.js更改时,更新$scope
Update $scope when contenteditable Elements Change with Angular.js
我是Angular.js的新手,已经尝试过学习如何在ng-repeat
中双向绑定contenteditable
元素。
我正在使用控制器之间的共享"存储",例如
pushupsApp.factory('grids', function () {
return [
...
{
'id': 1409875200000, // 2014-09-05
'sets': [
5,
10,
15,
20,
25,
30
]
},
{
'id': 1409912060233, // 2014-09-05 11:14
'sets': [
5,
10,
15,
20,
25,
30
]
}
];
});
pushupsApp.controller('indexController', function ($scope, grids) {
$scope.grids = grids;
});
这似乎很有效;如果我在一个控制器中更改$scope.grids
,那么在刷新页面之前,这种更改在所有其他控制器中都是持久的。
根据本教程和Angular.js文档中的示例,我有以下控制器和指令:
pushupsApp.controller('gridController',
function ($scope, $routeParams, $filter, grids) {
var now = new Date(Date.now());
$scope.date = $filter('date')(now, 'yyyy-MM-dd');
$scope.grids = $filter('filter')(grids, {'id':$scope.date},
function (actual, expected) {
return angular.equals($filter('date')(actual, 'yyyy-MM-dd'),
$filter('date')(expected, 'yyyy-MM-dd'));
});
}).directive('contenteditable', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attributes, ngModel) {
ngModel.$render = function () {
element.html(ngModel.$viewValue || '');
};
element.bind('keyup', function () {
scope.$apply(function () {
ngModel.$setViewValue(element.html);
});
});
}
};
});
问题
我的意图是,当我编辑ng-repeat
中的contenteditable
元素时,$scope.grids
也会在keyup
事件触发时更新,以镜像编辑。
$scope.grids
没有更新。我试着研究自己可能发生的事情,但由于我是Angular.js的新手,我真的不知道我应该寻找什么!我所发现的一切都表明我当前的代码应该可以工作。
为了完整起见,我也有以下模板:
<script type="text/ng-template" id="grid.html">
<p>{{date}}</p>
<ul>
<li ng-repeat="grid in grids">
<p ng-if="grids.length > 1">{{grid.id | date:'shortTime'}}</p>
<ul>
<li contenteditable="" ng-model="grids" ng-repeat="set in grid.sets">
{{set}}
</li>
</ul>
</li>
</ul>
</script>
最终,我的"商店"将是持久的,但现在我很高兴它只在每次会话中。
对于我的Angular.js代码以及可能存在的问题,我们将非常感谢您的任何帮助,以及任何其他建议!
谢谢你的帮助!Jon
这可能有帮助
我注意到,当我将模板中的ng-model
属性更改为grid.sets
时,当keyup
事件触发$scope.grids
更新时但是,整个集合列表将从DOM和$scope.grids
中删除。这里可能正在发生一些事情,这可能有助于解决问题;希望来了!
在我发现之后(请参阅这可能有帮助),我突然非常接近解决方案!
由于从$scope.grids
中删除了整个数据块,我现在知道我可以将该块缩小到contenteditable
元素和"存储"中相应的数据块。
将ng-template
属性更改为grid.sets[$index]
就是这样做的。
事实证明,元素被从DOM中删除是因为我在这里缺少括号:
scope.$apply(function () {
// ngModel.$setViewValue(element.html);
ngModel.$setViewValue(element.html());
});
那只是粗心大意。contenteditable
元素在每次往返之后都会丢失focus
,所以我将事件改为在blur
上激发。
问题,已解决:-)
我希望这有帮助,Jon
- ng在更新$scope后重复不更新信息
- 获取Div Width,然后更新Scope Variable
- 在从websocket服务器推送消息后更新$scope变量
- JavaScript未更新$scope变量的一部分
- 如何在Angular中传递此回调并更新$scope
- 离子角 单击按钮后更新$scope变量
- AngularJS:如何在承诺响应后更新$scope
- AngularJS更新$scope变量并输出到pre
- 从 AngularJS 中的服务属性更新$scope
- 更新$scope-dons'不要影响视图
- AngularJS控制器在后端数据更改时自动更新$scope
- 从AngularJS中的服务获取数据后,如何更新$scope是最好的方法
- Angular js 在
标签上的变量更新$scope动画
- 为什么在这种特殊情况下视图没有更新?($scope.$apply)
- 通过更新$scope模型更正条目后,清除角度形式验证
- 当contenteditable Elements使用Angular.js更改时,更新$scope
- Angularjs-在$resource-delete方法的回调中更新$scope的问题(thinkster.io第三章
- Angular JS,在指令中从控制器中更新$scope
- 关闭模式时更新$scope集合
- Ionic:更新$scope变量后重新加载视图