AngularJS -在重新加载/更改路由器时触发回调
AngularJS - watcher triggers callback during reload/router change?
为什么在浏览器重新加载或angular路由改变时,即使oldvalue和newvalue是相同的,也会调用watch回调?例如
$scope.test = "blah";
$scope.watch("test", function(new,old){
console.log(new === old);
}
当你重新加载页面或路由改变并返回到控制器时,你将在控制台日志中看到true。我必须在回调中添加一个守卫来避免不必要的回调。我做错什么了吗?
如果您阅读文档http://docs.angularjs.org/api/ng.$rootScope.Scope#$watch,他们会讨论何时发生这种情况。这真的取决于你的应用程序的其余部分是如何设置的,但只是通过===做一个快速检查将让你知道它是否被更改(他们建议)
感谢上面Mathew Berg的回答,我在文档中找到了答案
在监听器注册到作用域后,监听器fn被注册异步调用(通过$evalAsync)来初始化监视器。在在极少数情况下,这是不希望的,因为侦听器在watchExpression的结果没有改变。要检测这个场景在监听器fn中,您可以比较newVal和oldVal。如果这两个值相同(===),则调用侦听器due初始化。
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 测试Angular Service解决错误回调中的promise
- 如何将一个JavaScript函数回调为多个函数
- JavaScript回调函数
- 用于回调的javascript参数
- 将json回调数据转换为日期
- 未为路由器应用程序调用Node.Js的回调
- 主干.js路由器回调,用于在除 1 个特定 URL 段之外的所有 URL 段上触发
- 主干:中止以前的路由器回调执行
- 突出显示具有骨干路由器回调的所选项目
- Reactjs路由器匹配回调参数总是未定义的
- AngularJS -在重新加载/更改路由器时触发回调
- 延迟回调中的异常:错误:路由器上没有配置uiManager
- 同一路由器上的多个.use()会导致覆盖回调
- 从回调传递变量到express路由器
- 在angular ui路由器状态解析中从$http获取错误回调
- 快速路由器回调