1
任何人都可以解释为什么$ watch()为我的范围解雇,即使newValue == oldValue在这里?
scope.$watch('element', function(newValue, oldValue) {
if (newValue == oldValue) {
console.log(newValue == oldValue);
return;
}
}, true);
“真”,且输出NEWVALUE和属性oldValue是具有相同的值的两个对象:
{"formID":"536826128a1c00617d3e4c5f","elementType":"TextFieldElement","required":false,"note":"","label":"","fieldName":"","_id":"5368261b8a1c00617d3e4c60","__v":0,"$$hashKey":"01B"}
{"formID":"536826128a1c00617d3e4c5f","elementType":"TextFieldElement","required":false,"note":"","label":"","fieldName":"","_id":"5368261b8a1c00617d3e4c60","__v":0,"$$hashKey":"01B"}
我从传递“真”的第三个参数$腕表docs理解比较对于使用angular.equals()的对象相等。我还用angular.equals()进行了测试,并且它也返回true。那么为什么$ watch()被触发呢?
我正在使用AngularJS v1.2.16。
是否只有一次?这确实发生在init上,文档说通过比较oldVal和newVal来检查它。 – aet
是的,它似乎只发生在初始化,这似乎是问题。我在文档中忽略了这一点。在监听器中使用===检查解决了这个问题。如果您想在此发布答案,我很乐意将其标记为答案。 –
谢谢!很高兴我能帮上忙。 – aet