我试图了解如何在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类似,但我也有兴趣了解如何在字典中查看所有属性。
许多人提前感谢。
答案 0 :(得分:0)
手表监听器为您提供newValue和oldValue - 因此您可以比较两者以查看更改的内容。由于您希望执行值而不是参考比较,因此请使用$ watch并将第三个参数设置为true:
$scope.$watch( 'myObject', function( newVal, oldVal ){
// Compare newVal and oldVal here to see what has changed.
}, true);