2013-05-22 34 views
1

为什么在浏览器重新加载或角度路由更改时调用手表回调,即使旧值和新值相同。例如AngularJS - watcher在重载/路由器更改期间触发回调?

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

您将看到控制台登录真正重新载入网页的任何时间或路线改变路程,回到那个控制器。为了避免不必要的回调,我必须在回调中添加一个警卫。有什么我做错了吗?

回答

0

感谢上述来自Mathew Berg ,我发现在documentation

答案后观察者与范围登记,听者FN是 异步调用(通过$ evalAsync)来初始化观察者。在极少的情况下,这是不受欢迎的,因为当watchExpression的结果没有改变时调用监听器。要在侦听器fn中检测此场景 ,可以比较newVal和oldVal。如果 这两个值是相同的(===),那么听者被称为 初始化。