AngularJS - watcher在重载/路由器更改期间触发回调?

时间:2013-05-22 15:25:18

标签: javascript angularjs

为什么即使oldvalue和newvalue相同,也会在浏览器重新加载或角度路径更改时调用watch回调。例如

$scope.test = "blah"; 
$scope.watch("test", function(new,old){
  console.log(new === old);
} 

每次重新加载页面或路径更改并返回到该控制器时,您都会在控制台日志中看到true。我不得不在回调中添加一个守卫来避免不必要的回调。我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果您阅读文档http://docs.angularjs.org/api/ng.$rootScope.Scope#$watch,他们会谈到何时发生这种情况。这实际上取决于您的应用程序的其余部分是如何设置的,但只需通过===进行快速检查就可以让您知道它是否已更改(他们建议)

答案 1 :(得分:0)

感谢Mathew Berg的上述答案,我在documentation

中找到了答案
  

在观察者注册范围后,监听器fn是   异步调用(通过$ evalAsync)来初始化观察者。在   在极少数情况下,这是不可取的,因为在何时调用侦听器   watchExpression的结果没有改变。检测这种情况   在监听器fn中,您可以比较newVal和oldVal。如果   这两个值是相同的(===)然后监听器被调用   初始化。