我创建了一个服务,它有一个将发出事件的流$,我希望在app.component激发流$ emit后,<router-outlet></router-outlet>
中的子组件将能够订阅它,但是现在我遇到的问题是,即使它在构造函数中订阅它,订阅回调也永远不会被解雇。
我想知道这是否与通过流服务发送事件有什么不同?
最佳做法是什么?
答案 0 :(得分:8)
最简单的方法是创建活动总线服务:
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');})
}