我使用三个带有 ngModel 指令的输入复选框来绑定到名为“props”的对象的属性。
我正在使用 $scope.$watchCollection 对“道具”的所有属性(共有三个)设置监视。
在我的 $watchCollection 回调函数中,我需要将旧属性值与新属性值进行比较,但在函数中,新旧属性总是相同的!
这是一个工作示例:http: //jsbin.com/eYofakU/3/edit。这里发生了什么?
这使用 Angular 1.2.0-rc.3
谢谢!
我使用三个带有 ngModel 指令的输入复选框来绑定到名为“props”的对象的属性。
我正在使用 $scope.$watchCollection 对“道具”的所有属性(共有三个)设置监视。
在我的 $watchCollection 回调函数中,我需要将旧属性值与新属性值进行比较,但在函数中,新旧属性总是相同的!
这是一个工作示例:http: //jsbin.com/eYofakU/3/edit。这里发生了什么?
这使用 Angular 1.2.0-rc.3
谢谢!
编辑这是我的问题已经关闭,它现在应该从 1.2.15 版本开始工作。
-- 旧答案 -- $watchCollection 仍然
存在一个问题,您可以选择使用 @CodeHater 解决方案或尝试johnsoftek 在 github 上提出的快速修复,(您需要构建 angular js 文件)
编辑:我尝试了 github 上报告的快速修复,它似乎有效,这是您在 plnkr.co 中工作的示例http://plnkr.co/s9W2B84sX8lZOOUgifEL
请注意,我构建的角度版本是 v1.2.5-ca116c3今天(12 月 8 日)来自 master 分支。
编辑:13/01/14
问题是里程碑的一部分:1.2.9
这对我有用。我更改了$watchCollection
to$watch
并将第三个参数设置为 true ,它告诉 angular 创建被监视对象的深层副本以进行比较:
$scope.$watch("props",function(n,o){
console.log("NEW");
console.log(n);
console.log("OLD");
console.log(o);
console.log("Why are they the same?!");
},true);