使用$watch更新数据,ng重复不反映更改
Using $watch to update data, ng-repeat not reflecting changes
我在$scope.raw
中有一个食物项目列表,我想在列中显示这些数据,所以我要稍微改变一下结构。我在sortStuff()
函数中执行此操作,并将更新后的数据存储在$scope.allfood
中。有一个$watch,每当$scope.raw
中发生任何变化时都会调用sortStuff()
(我使用拖放来更改食物类别):
$scope.$watch('raw', function(){
$scope.allfood = $scope.sortStuff();
console.log($scope.allfood);
}, true);
这就是当食物被拖来拖去时会发生的情况:
receive:function(event, ui) {
var issueScope = angular.element(ui.item).scope();
scope.$apply(function() {
var recp = _.find(scope.raw, function(lineitem){
return lineitem.name === issueScope.receipe.name;
})
recp.cat = scope.col.name;
})
$(ui.item).remove(); // remove DOM
}
基本上,我在$scope.raw
中搜索正确的对象,并将cat
更改为食物的新类别。我还删除了dom元素,因为我指望ng repeat来刷新视图。这似乎很好:$watch中的console.log显示对象正在移动到正确的类别,数据看起来应该是什么样子。然而,从视觉上看,ng重复并不能反映数据。
这是小提琴。
将项目从B拖动到C很好。从A拖动一个到B,会使B中的两个项目消失。。。结果非常不一致,我不知道发生了什么。
有什么问题吗?或者有什么更好的方法建议吗?
ng-repeat
指令将属性$$hashKey
添加到列表中的每个元素。该指令使用此属性将DOM元素与数组元素相关联。
由于通过引用传递元素,ng-repeat
指令将$$hashKey
属性直接写入$scope.raw
数组的对象中。一个简单的解决方法是在将对象插入$scope.allfood
对象之前复制对象。
_.each($scope.raw, function(recp){
recp = _.clone(recp);
switch(recp.cat){
...
}
});
现在ng-repeat
更新$scope.allfood
的对象,而$scope.raw
的对象保持不变。
查看更新的小提琴:
http://jsfiddle.net/b8Fa7/5/
相关文章:
- ng映射方向备选方案
- AngularJS UI路由器不能像ng路由器那样工作
- 角度:在ng重复上切换图像
- 正在使用$location.path(.)路由ng视图
- AngularJS ng src不会在$rootScope上使用$watch进行更新
- 让ng更改等待$watch完成
- 输入字段 (ng-modal) 完成后的事件 ($watch)
- 使用$watch更新数据,ng重复不反映更改
- $watch不会启动自动完成ng模型
- 何时在 Angularjs 中使用 $watch 或 ng-change
- 如何使用$scope.$watch和ng-repeat
- 美元的范围.父控制器上的$watch不会触发子控制器上的ng-select
- AngularJS:从ng-repeat中删除$watch
- 在AngularJS中使用$watch获取用户输入文本不适用于ng-if
- ng-单击值更改 + $scope.watch 绑定无法正常工作
- AngularJS ng-watch事件在去抖动后触发
- 如何在 ng 重复表中$watch是否选中或取消选中 checbox
- AngularJS$watch变量并重新计算ng类表达式
- $scope上的ng类.$watch不工作在第二次点击
- ng-model with $watch只响应完整字符串(AngularJS)