Javascript AngularJS-在重新加载/路由器更改期间,观察者触发回调?

Javascript AngularJS-在重新加载/路由器更改期间,观察者触发回调?,javascript,angularjs,Javascript,Angularjs,为什么即使oldvalue和newvalue相同,也会在浏览器重新加载或角度布线更改时调用watch回调。比如说 $scope.test = "blah"; $scope.watch("test", function(new,old){ console.log(new === old); } 当您重新加载页面或更改路由并返回到该控制器时,您将在控制台日志中看到true。我必须在回调中添加一个保护,以避免不必要的回调。我做错了什么吗?如果你阅读了他们在发生这种情况时谈论的文档。这实际上取

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

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

当您重新加载页面或更改路由并返回到该控制器时,您将在控制台日志中看到true。我必须在回调中添加一个保护,以避免不必要的回调。我做错了什么吗?

如果你阅读了他们在发生这种情况时谈论的文档。这实际上取决于应用程序的其余部分是如何设置的,但只要通过===进行快速检查,就会让你知道它是否已更改(他们建议)

如果你阅读了他们在发生这种情况时谈论的文档。这实际上取决于你的应用程序的其余部分是如何设置的,但只要通过===快速检查一下就会让你知道它是否更改了(他们建议这样做)

多亏了Mathew Berg的上述答案,我在

观察者注册到作用域后,监听器fn 异步调用(通过$evalAsync)初始化观察程序。在里面 在极少数情况下,这是不可取的,因为侦听器在 watchExpression的结果没有改变。要检测此场景 在侦听器fn中,可以比较newVal和oldVal。如果 这两个值是相同的(==),然后调用侦听器 到初始化


多亏了Mathew Berg的回答,我在

观察者注册到作用域后,监听器fn 异步调用(通过$evalAsync)初始化观察程序。在里面 在极少数情况下,这是不可取的,因为侦听器在 watchExpression的结果没有改变。要检测此场景 在侦听器fn中,可以比较newVal和oldVal。如果 这两个值是相同的(==),然后调用侦听器 到初始化