【问题标题】:Emit and broadcast events throughout application in Angular在 Angular 中的整个应用程序中发送和广播事件
【发布时间】:2016-11-30 13:13:23
【问题描述】:

有没有办法在 angular2 中发出可以在整个应用程序中收听的事件?就像我们在 AngularJS 中使用 $rootScope.broadcast 和 emit 一样。可以在angular2中实现同样的事情吗?我阅读了@Output() 和EventEmitter() 并实现了它,但它只限制了父母收听孩子发出的事件。

我读到BehaviorSubject 是实现此目的的方法之一。这是正确的方法吗?还有其他解决方案吗?

【问题讨论】:

  • 使用 observables 似乎是一个不错的选择:stackoverflow.com/questions/34376854/…
  • 你可以添加一个 observable 到你的父级,当子级发射时设置它。然后你可以在任何你想要的地方订阅那个 observable。

标签: angular observable angular2-services eventemitter behaviorsubject


【解决方案1】:

在 Angular2 中没有全局范围。只有组件和服务。

对于服务,您可以通过提供服务的地点来定义服务范围。如果您在@NgModule({providers: ...})(或导入的模块)中提供一个,它将成为全球可用的。如果您在组件中提供它,则它仅适用于该组件及其子组件。

关于如何使用共享服务的例子见https://github.com/dart-lang/sdk/issues/27637

您还可以像in Angular2 how to know when ANY form input field lost focus 中所示那样调度冒泡 DOM 事件

@Output() someOutput:EventEmitter = new EventEmitter(); 发出的事件不会冒泡。

【讨论】:

  • BehaviorSubject 是一种简单的方法。铁杆反应主义者认为应该避免使用Subject。 davesexton.com/blog/post/…, stackoverflow.com/questions/14396449/… 所以这是一个固执己见的问题。如果您是 rxjs 新手,我建议您使用它,直到您对响应式编程更加熟悉并且能够自己决定为止。
  • 谢谢甘特!!我会做的。只是想根据我的知识确认服务是最好的方式吗?
  • 服务是 Angular2 中的方式。
猜你喜欢
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 2016-01-25
  • 2016-02-03
  • 2017-05-01
相关资源
最近更新 更多