【问题标题】:How to broadcast events from app.component to router-outlet in angular2如何在angular2中将事件从app.component广播到路由器插座
【发布时间】:2016-08-15 09:16:12
【问题描述】:
我创建了一个服务,它有一个会发出事件的 stream$,我希望在 app.component 触发 stream$ 发出后,<router-outlet></router-outlet> 中的子组件将能够订阅它,但现在我遇到的问题是,即使它在构造函数中订阅它,订阅回调也永远不会被触发。
我想知道这与通过流服务发出事件时是否不同?
最佳做法是什么?
【问题讨论】:
标签:
angular
rxjs
angular2-routing
【解决方案1】:
最简单的方法是创建事件总线服务:
export class EventBusService
{
bus:Subject<Event> = new Subject<Event>();
dispatch(data:Event){
this.bus.next(data);
}
//its up to you how to implement it:
listen(type:string):Observable<Event> {
return this.bus.filter(event=>event.type === type);
}
}
使用依赖注入:
bootstrap(App, [EventBusService]);
组件构造函数:
constructor(bus:EventBusService){
bus.dispatch(new Event());
bus.listen('load').subscribe((e)=>{console.log('loaded');})
}