Javascript 带有嵌套数组的$watchCollection()
我有一个嵌套数组的形式:Javascript 带有嵌套数组的$watchCollection(),javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我有一个嵌套数组的形式: $scope.itinerary = [ [ {name:'x'}, {name:'y'}, {name:'z'} ], [ {name:'a'}, {name:'b'}, {name:'c'} ] ] 我正在使用以下方法收集$watchCollection: $sco
$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?您不应该使用$watchCollection,而应该在第三个参数设置为true的情况下使用$watch
这会起作用,但如果阵列很大,这对性能也是一个坏主意,因此请谨慎使用
使用angular.eaquals与使用angular.copy获得的复制对象进行比较
更多详细信息,请访问$rootScope.Scope#$watch使用深度监视
$watch()函数接受第三个可选参数“object equality”。如果您为该参数传入“true”,AngularJS将实际执行深层对象树比较。这意味着在每个$digest中,AngularJS将检查新值和旧值是否具有相同的结构(而不仅仅是相同的物理引用)。这允许您监控更大的景观;然而,深层对象树比较在计算上要昂贵得多
$scope.$watch('itinerary',function (newVal,oldVal) {
console.log(newVal)
},true);