Emitiendo events angular2 globalmente

Lo que estoy tratando de lograr es que me gustaría emitir un evento personalizado en angular2 a nivel mundial y tener varios componentes que lo escuchen, por lo que no solo el patrón primario

En mi evento, el componente de souce tengo

export class EventSourceComponent{ @Output() testev = new EventEmitter(); onbtnclick(){ this.testev.emit("i have emitted an event") } } 

Ahora me gustaría que otros componentes obtengan este evento

 export class CmpTwoComponent{ //here get the emitted event with data } 

¿Cómo logro lo anterior?

Puede usar un service compartido para eso.

 export class EventSourceComponent{ constructor(private shanetworkingService : ShanetworkingService){} onbtnclick(){ this.shanetworkingService.testev.next("i have emitted an event") } } export class CmpTwoComponent{ //here get the emitted event with data constructor(shanetworkingService : ShanetworkingService){ shanetworkingService.testev.subscribe((event)=>{console.log(event)}) } } 

y luego el service compartido sería

 @Injectable() export class ShanetworkingService{ public testev = new Subject() } 

Obviamente, si aún necesita la Output para que el componente principal pueda suscribirse normalmente, puede agregar eso también:

 export class EventSourceComponent{ @Output() testev = new EventEmitter(); constructor(private shanetworkingService : ShanetworkingService){} onbtnclick(){ this.testev.emit("i have emitted an event") this.shanetworkingService.testev.next("i have emitted an event") } } 

No hay ningún patrón en Angular que permita lograr lo que usted solicita.

La mejor opción que se me ocurre es crear un service personalizado. Realice algún service que inyecte en AppComponent (por lo tanto, tendrá una sola instancia del service). En el Servicio puedes tener la lógica que quieras.