所以我对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/的长度。
答案 0 :(得分:0)
根据documentation,被观察的参数($watchCollection
的第一个参数)如下:
通过标准的$ watch操作观察obj集合 检查每次调用$ digest()以查看是否有任何项目 添加,删除或移动。
观察者仅仅验证长度是否已经改变是不够的。相反,它必须迭代数组以不仅检查长度,而且检查该数组中的任何元素是否已被修改,以及它们在监视数组中的位置。对于集合的每次修改都会发生这种情况。