import { Observable, Subject } from 'rxjs'; import { filter, map } from 'rxjs/operators'; import { Injectable } from '@angular/core'; interface BroadCastObject { key: any; value: any; } @Injectable({ providedIn: 'root' }) /* just single subject to emit across application key-value pair */ export class BroadcasterService { private _eventQueue: Subject; constructor() { this._eventQueue = new Subject(); } broadcast(key: any, value: any) { this._eventQueue.next({ key, value }); } unsubscribe() { this._eventQueue.complete(); } listen(key: any): Observable { return this._eventQueue.asObservable().pipe( filter((e) => e.key === key), map((e) => e.value) ); } }