【问题标题】:When and How to use broadcast event in Angularjs?何时以及如何在 Angularjs 中使用广播事件?
【发布时间】:2014-11-27 18:20:01
【问题描述】:

我是 Angularjs,但正在构建一个示例应用程序。当我阅读一些代码时,人们将事件广播为:

 $rootScope.$broadcast('someevent');

例如登录时,许多人使用广播登录成功通知整个应用程序用户已登录。我知道登录状态可以使用 $rootScope 变量来管理,例如 $rootScope.logged = true 身份验证时成功,甚至使用可以注入控制器的AuthService。身份验证服务将返回用户状态和一些用户信息。

我的问题是: 1- 何时以及为何使用 $rootScope.$broadcast('someevent'); 2- 使用全局变量或用户身份验证服务维护用户身份验证状态有什么缺点?

谢谢

【问题讨论】:

  • $rootScope 变量和全局变量一样都是邪恶的。并且使用服务维护用户身份验证状态没有缺点;实际上,这是最好的解决方案。事件是廉价而肮脏的补丁。

标签: angularjs


【解决方案1】:

在 $rootScope 上放置任何数据或函数的缺点是所有子作用域也具有该信息,这意味着您正在污染作用域。如果您尝试在控制器和指令之间共享数据,最好的方法是使用 Service、Factory 或 Provider。

现在我觉得使用 $rootScope 中的 $broadcast 很好,因为它比当前范围中的 $emiting 和 $broadcasting 更容易让应用知道发生了非常重要的事情,但只发送事件,而不是数据。然后,当作用域有兴趣了解数据时,他们应该从服务中访问这些数据。

如果多个控制器需要知道登录状态发生了变化,那么一个事件是正确的方法,而不是他们对来自服务的数据执行 $watch。

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 2013-09-22
    • 2015-10-20
    • 1970-01-01
    • 2015-10-13
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多