AngularJS:对数组中所有对象的$ watch属性

时间:2014-08-27 22:37:45

标签: javascript arrays angularjs

我试图了解如何在angularjs中实现以下目标。

1)我有一个对象数组:

$scope.myArray = [{special:false, name:'alice'}, {special:false, name:'bob'}];

如果myArray [0] .special更改为true,则使用$ watch如何检测到这是因为数组元素0的更改。我在$ watch上阅读的所有内容都涉及通知整个数组已更改,但无法检索已更改的数组的元素/索引。我希望能够应对不同长度的数组,因此仅仅具有:

是不够的
$scope.watch('myArray[0].special')

2)我有一本字典:

$scope.myValues = {id1:{special:false, name:'alice'}, id2:{special:false, name:bob'}};

一个类似的问题 - 如果我要将myValues.id1.special更改为true,我怎么能得到相应的名字字段(或者知道它是id1)?

我非常感谢有关最佳实践的任何帮助和指导,以及有关数组和地图的angularjs和$ watch(或$ watchcollection)实际可行的内容。我认为这与问题AngularJS : Watch array of objects and animate the changed property类似,但我也有兴趣了解如何在字典中查看所有属性。

许多人提前感谢。

1 个答案:

答案 0 :(得分:0)

手表监听器为您提供newValue和oldValue - 因此您可以比较两者以查看更改的内容。由于您希望执行值而不是参考比较,因此请使用$ watch并将第三个参数设置为true:

$scope.$watch( 'myObject', function( newVal, oldVal ){
    // Compare newVal and oldVal here to see what has changed.
}, true);