带有if语句的$ scope.watchCollection删除数组数据

时间:2016-02-01 05:17:31

标签: angularjs scope angularjs-scope watch

所以我对watchCollection语句感到有些困惑。我正在看一个我的数组对象的变化,我注意到每当我在$ watch函数中使用if语句时,我删除了我的数组的1个元素。我很困惑为什么$ watchCollection函数是一个迭代过程,其中重新运行数组的长度。我在下面有这个简单的手表功能:

            scope.$watchCollection('waypoints', function () {
                if (scope.waypoints.length > 1) {
                    if (scope.waypoints[scope.waypoints.length - 1] == "`") {
                        scope.waypoints.pop();
                    }
                    calculateAndDisplayRoute(directionsService, directionsDisplay, scope.waypoints);
                }
            });

当我运行if语句时,我从数组中丢失了一个元素。我甚至创建了一个带调试器的jsfiddle,显示$ watch函数重复了数组http://jsfiddle.net/kL6909to/的长度。

1 个答案:

答案 0 :(得分:0)

根据documentation,被观察的参数($watchCollection的第一个参数)如下:

  

通过标准的$ watch操作观察obj集合   检查每次调用$ digest()以查看是否有任何项目   添加,删除或移动。

观察者仅仅验证长度是否已经改变是不够的。相反,它必须迭代数组以不仅检查长度,而且检查该数组中的任何元素是否已被修改,以及它们在监视数组中的位置。对于集合的每次修改都会发生这种情况。