2

有没有办法在angular2中发出可以在整个应用程序中收听的事件?就像我们在AngularJS中使用$rootScope.broadcastemit一样。在angular2中可以达到同样的效果吗?我阅读了关于@Output()EventEmitter()并实施了它,但它只限制父母监听由孩子提供的事件。我读了BehaviorSubject是做这件事的方法之一。这是正确的方法吗?任何其他解决方案?在Angular中的应用程序中发射和广播事件

+3

使用observables似乎是一个很好的选择:http://stackoverflow.com/questions/34376854/delegation-eventemitter-or-observable-in-angular2/35568924#35568924 – j3r6me

+0

你可以添加一个可观察到你的父母得到当孩子排出时设置。然后,您可以在任何需要的地方订阅该观察点。 –

回答

2

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

通过服务,您可以根据您提供的地点来定义其范围。如果您在@NgModule({providers: ...})(或在导入的模块中)提供了一个,它将变为全局可用。如果您在某个组件上提供它,则只有该组件及其子组件可用。

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

您也可以派遣冒泡DOM事件一样显示在@Output() someOutput:EventEmitter = new EventEmitter();发出in Angular2 how to know when ANY form input field lost focus

事件不泡。

+2

'BehaviorSubject'是一个简单的方法。铁杆反应主义者认为应该避免“主题”。 http://davesexton.com/blog/post/To-Use-Subject-Or-Not-To-Use-Subject.aspx,http://stackoverflow.com/questions/14396449/why-are-subjects-not-推荐在网络反应扩展所以这是一个固执己见的问题。如果你是rxjs的新手,我建议你使用它,直到你对反应式编程更加舒适,并且能够为自己做出决定。 –

+1

感谢Gunter!我会做的。只是想确认我的知识服务是做到这一点的最佳方式吗? –

+0

服务是**在Angular2中实现它的方法。 –