数组更改未触发$ 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

回到顶部