我是Angularjs但是正在构建一个示例应用程序。当我阅读一些代码时,人们将事件广播为:
$rootScope.$broadcast('someevent');
例如,在登录时,许多人使用广播登录成功通知整个应用程序用户已登录。我知道可以使用$ rootScope变量(例如$rootScope.logged = true
)管理登录状态身份验证成功,甚至可以使用可以注入控制器的AuthService
。身份验证服务将返回具有状态和一些用户信息的用户。
我的问题是:
1-何时以及为何使用$ rootScope.$broadcast('someevent');
2-使用全局变量或用户身份验证服务维护用户身份验证状态有哪些缺点?
由于
答案 0 :(得分:1)
在$ rootScope上放置任何数据或函数的缺点是所有子范围也具有该信息,这意味着您正在污染范围。如果您尝试在控制器和指令之间共享数据,最好的方法是使用服务,工厂或提供程序。
现在我觉得使用来自$ rootScope的$ broadcast是很好的,因为它比$ emiting和现在范围内的$ broadcast更容易让应用程序知道发生了一些非常重要的事情,但只是发送事件而不是数据。然后,当范围有兴趣了解数据时,他们应该从服务中访问它。
如果多个控制器需要知道登录状态发生了变化,那么事件就是正确的,而不是他们对来自服务的数据进行$ watch。