为什么即使oldvalue和newvalue相同,也会在浏览器重新加载或角度路径更改时调用watch回调。例如
$scope.test = "blah";
$scope.watch("test", function(new,old){
console.log(new === old);
}
每次重新加载页面或路径更改并返回到该控制器时,您都会在控制台日志中看到true。我不得不在回调中添加一个守卫来避免不必要的回调。我做错了什么?
答案 0 :(得分:1)
如果您阅读文档http://docs.angularjs.org/api/ng.$rootScope.Scope#$watch,他们会谈到何时发生这种情况。这实际上取决于您的应用程序的其余部分是如何设置的,但只需通过===进行快速检查就可以让您知道它是否已更改(他们建议)
答案 1 :(得分:0)
感谢Mathew Berg的上述答案,我在documentation
中找到了答案在观察者注册范围后,监听器fn是 异步调用(通过$ evalAsync)来初始化观察者。在 在极少数情况下,这是不可取的,因为在何时调用侦听器 watchExpression的结果没有改变。检测这种情况 在监听器fn中,您可以比较newVal和oldVal。如果 这两个值是相同的(===)然后监听器被调用 初始化。