此问题已在1.3.0测试版中得到解决:请参阅commit
我有一个数组,我想听取更改并将新值与旧值进行比较。 $ watchCollection(http:// docs.angularjs.org/api/ng.$rootScope.Scope)的文档,说回调有三个参数,第一个是新集合,第二个是前者的副本值。似乎将相同的数组传递给两个参数,而不是新旧值。
在这个example中,相同的数组被传递给新值和以前的值,无论我是将值推送到数组,将变量设置为新数组,还是编辑数组的元素。所有3个示例都会触发监听监听器,但没有一个示例包含回调中的前一个值。
我可以通过此example获得我想要的结果。它使用$ watch(obj,listener,equality)方法,将true作为第三个参数。 $ watchCollection不应该提供这个功能吗?
$scope.$watchCollection("arr", function(newVal, oldVal) {
//here, oldVal should contain a copy of the former value,
//but it is the same as newVal
});
答案 0 :(得分:1)
编辑:对以前的回答感到抱歉。
但是看起来它在AngularJs存储库中是一个完全相同的问题。
https://github.com/angular/angular.js/issues/2621
祝你好运。