Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有嵌套数组的$watchCollection()_Javascript_Arrays_Angularjs - Fatal编程技术网

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);