javascript - $watchCollection() 嵌套数组

标签 javascript arrays angularjs

我有一个嵌套数组:

$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/

相关文章:

javascript - Ajax - 检查 Url 是否存在的函数

javascript - 如何解决 TypeError : Cannot convert undefined or null to object

javascript - 单元测试 Angular/ ionic 项目

javascript - 使用 ng-model 定义变量与 AngularJS 中的 Controller 定义变量之间的区别

javascript - 使用 chrome.cookies 扩展响应 cookie 和 2 个异步 xmlhttp 请求

javascript - 如果kendo grid没有返回记录则清空div

c - 如何在C中将字符 '1'和字符 '0'转换为整数10?

php - 如何获取对象或类名?

javascript - jquery - 如何将数组值放入动画中?

angularjs - 在 Angular 指令中使用第三方库