我有一个嵌套数组:
$scope.itinerary =
[
[
{name:'x'},
{name:'y'},
{name:'z'}
],
[
{name:'a'},
{name:'b'},
{name:'c'}
]
]
我正在使用以下方法进行 $watchCollection 操作:
$scope.$watchCollection(function () {
return $scope.itinerary;
},
function () {
console.log("Changed")
}
);
但是 console.log()
只有在删除子数组之一或插入新数组时才会执行。如果我将一个元素从一个数组移动到另一个数组,什么也不会发生。 (例如,当我将 {name:'a'}
从一个数组移动到另一个数组时,没有任何反应)。如何在嵌套数组上放置 watch ?
最佳答案
使用深度观察 $watch() 函数采用第三个可选参数来表示“对象相等性”。如果你为这个参数传入“true”,AngularJS 实际上会执行深度对象树比较。这意味着在每个 $digest 中,AngularJS 将检查新值和旧值是否具有相同的结构(不仅仅是相同的物理引用)。这使您可以监视更大的景观;然而,深度对象树比较的计算成本要高得多。
$scope.$watch('itinerary',function (newVal,oldVal) {
console.log(newVal)
},true);
关于javascript - $watchCollection() 嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25803170/