数组更改未触发$ watch
我试图弄清楚为什么$watch
没有触发我。这是相关控制器的片段:
$scope.$watch('tasks', function (newValue, oldValue) { //do some stuff
//only enters here once
//newValue and oldValue are equal at that point
});
$scope.tasks = tasksService.tasks();
$scope.addTask = function (taskCreationString) {
tasksService.addTask(taskCreationString);//modifies tasks array
};
在我看来,tasks
显然是正确更新的,因为我的长度范围是这样的:
<span>There are {{tasks.length}} total tasks</span>
我想念什么?
回答:
尝试$watch('tasks.length', ...)
或$watch('tasks', function(...) { ... },
true)。
默认情况下,$
watch不检查对象是否相等,而仅作为参考。因此,$watch('tasks',
...)将总是简单地返回相同的数组引用,并且不会改变。
Angular v1.1.4添加了一个$
watchCollection()方法来处理这种情况:
Shallow监视对象的属性,并在任何属性更改时触发(对于数组,这意味着监视数组项,对于对象映射,这意味着监视属性)。如果检测到更改,
listener
则触发回调。
以上是 数组更改未触发$ watch 的全部内容, 来源链接: utcz.com/qa/406181.html