Как передавать события от app.component до маршрутизатора-выхода в angular2

Я создал службу, у которой есть поток $, который выдает событие, я надеюсь, что после того, как app.component запускает поток $emit, дочерний компонент в <router-outlet></router-outlet> сможет подписаться на него, но теперь проблема у меня есть, даже если он подписывается на нее в конструкторе, абонентский звонок никогда не запускается.

Интересно, отличается ли это от того, когда происходит передача событий через службу потока?

Какова наилучшая практика?

Ответ 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');})
}