为什么AngularJS在什么都没改变的情况下会触发$watch ?
Why does $watch trigger with AngularJS when nothing has changed?
谁能解释为什么$watch()是触发我的范围,即使newValue == oldValue在这里?
scope.$watch('element', function(newValue, oldValue) {
if (newValue == oldValue) {
console.log(newValue == oldValue);
return;
}
}, true);
"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"}
我从文档中了解到,将第三个参数的"true"传递给$watch使用angular.equals()比较对象的相等性。我还测试了angular.equals(),它也返回true。那么为什么要触发$watch()呢?
我使用的是AngularJS v1.2.16。
根据angular文档,这可以在初始化时发生:
在监听器注册到作用域后,监听器fn被异步调用(通过$evalAsync)来初始化监听器。在极少数情况下,这是不希望看到的,因为侦听器是在watchExpression的结果没有改变时调用的。要在侦听器fn中检测此场景,可以比较newVal和oldVal。如果这两个值相同(===),则由于初始化而调用侦听器。
相关文章:
- 如何在未直接触发的情况下停止事件
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- 在不打开聊天屏幕的情况下制作Zopim-ding代理
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何在不传递此信息的情况下查找被调用的元素
- 如何在不刷新页面的情况下更新显示框
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 在我的情况下,如何进行http请求
- 在不知道深度或父属性的情况下从对象中删除属性
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- ROR:如何在不重新加载浏览器的情况下从控制器获取参数
- AngularJS:在没有$watch的情况下观察变量
- 如何让 Grunt/Watch/LiveReload 在不刷新整页的情况下重新加载 Sass/CSS
- 在不阻塞终端的情况下运行Grunt Watch
- 在AngularJS中有没有一种方法可以在不使用$watch的情况下对模型变化做出反应?
- Gulp-watch在不更改文件的情况下无休止地编译
- Angular UI Router 1.0——为什么在不离开state的情况下调用$scope.$watch('
- 为什么AngularJS在什么都没改变的情况下会触发$watch ?