【发布时间】:2017-01-25 18:44:12
【问题描述】:
正如Angular team(和多个blogs)所建议的那样,我尽量避免在我的应用中使用$rootScope。
$rootScope存在,但可以用来作恶“当然,全局状态很糟糕,你应该谨慎使用
$rootScope, 就像您(希望)在任何语言中使用全局变量一样。 特别是,不要将其用于代码,仅用于数据。如果你想 在$rootScope上放一个函数,几乎总是把它放在一个 可以在需要的地方注入服务,并且更容易 经过测试。” - 来自Angular FAQ
但在我的一个应用程序中,我使用了多次事件,例如$routeChangeStart,它们是广播事件,使用$rootScope:
/* Force redirection to home page when a connected user calls login page */
$rootScope.$on("$routeChangeStart", function(event, next, current) {
if(next.$$route.originalPath == '/login' && Session.isUserConnected()) {
$location.path("/home");
}
}
在这些情况下,我没有办法避免$rootScope。
- 有没有更优雅的方法来做这种技巧?
- 这是我的应用程序使用它的设计错误吗?
- 我必须在绝对必要时辞职才能使用它吗?
如果您希望我提供更多代码示例,请告诉我。
【问题讨论】:
-
你读过这个
global state sucks and you should use $rootScope sparingly??? -
@RameshRajendran 是的,来自我提供的first link(最后一段)。它来自 Angular 文档常见问题解答。
-
对于这种情况,您只是在收听广播到 $rootScope 的事件,我认为这是一个有效的用例。
标签: angularjs angularjs-routing angularjs-rootscope