如何在angular2中将app.component中的事件广播到router-outlet

时间:2016-04-21 23:11:20

标签: angular rxjs angular2-routing

我创建了一个服务,它有一个将发出事件的流$,我希望在app.component激发流$ emit后,<router-outlet></router-outlet>中的子组件将能够订阅它,但是现在我遇到的问题是,即使它在构造函数中订阅它,订阅回调也永远不会被解雇。

我想知道这是否与通过流服务发送事件有什么不同?

最佳做法是什么?

1 个答案:

答案 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');})
}