I created this broadcast service. How can I add the BroadcastChannel.removeEventListener method when the event handler for addEventListener is dynamically generated?
@Injectable({
providedIn: 'root'
})
export class BroadcastService {
private consumer: BroadcastChannel;
private producer: BroadcastChannel;
constructor() {
this.consumer = new BroadcastChannel('pluginGlobalEventBus');
this.producer = new BroadcastChannel('pluginGlobalEventBus');
}
/**
* broadcast a message
*/
postMessage(message: any): void {
this.producer.postMessage(message);
}
/**
* listen to a broadcast
*/
addEventListener(eventName, listener): void {
this.consumer.addEventListener('message', event => {
if (event.data.name === eventName) {
listener(event.data.value);
}
});
}
/**
* stop broadcasting
*/
close(): void {
this.consumer.close();
this.producer.close();
}
}
You can store event listeners in a
private
array and iterate on those listeners to remove them.If for some reason, you need to remove only one listener at a time, then I guess you can use a
Map
to store event listener instead, and generate a unique id onaddEventListener
.