Emit and broadcast events throughout application in Angular

大兔子大兔子 提交于 2019-12-12 09:58:43

问题


Is there a way to emit event in angular2 that can be listened to in entire application? Like we had in AngularJS using $rootScope.broadcast and emit. Can this same thing be achieved in angular2? I read about @Output() and EventEmitter() and implemented it but it restricts only the parent to listen to the event emmitted by child.

I read about BehaviorSubject being one of the ways to do this. Is that the right approach? Any other solution for this?


回答1:


In Angular2 there is no global scope. There are only components and services.

With services you can define their scope by the place you provide them. If you provide one in @NgModule({providers: ...}) (or in an imported module) it becomes globally avialable. If you provide it at a component, it is only available to this component and its children.

For examples how to use shared services see https://github.com/dart-lang/sdk/issues/27637

You can also dispatch a bubbling DOM event like shown in in Angular2 how to know when ANY form input field lost focus

Events emitted with @Output() someOutput:EventEmitter = new EventEmitter(); don't bubble.



来源:https://stackoverflow.com/questions/40889320/emit-and-broadcast-events-throughout-application-in-angular

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!