export class EventBus { public listeners = {}; public emit(event: string, data?) { if (this.listeners[event]) { this.listeners[event].forEach(listener => listener(data)); } } public on(event: string, listener: (data) => void) { if (!this.listeners[event]) { this.listeners[event] = []; } this.listeners[event].push(listener); } public unsubscribe(listener: (data) => void) { Object.values(this.listeners).forEach((listeners: any[]) => { const index = listeners.indexOf(listener); if (index > -1) { listeners.splice(index, 1); } }); } } export const eventBus = new EventBus();