Dispatcher

There are cases when states of not related components, which has different places in state tree, should change e.g: when list item is selected filter should collapse. This is where dispatcher kicks in. Dispatcher is design to send and receive messages between components.

First create a message

export class UpdateMessage extends Message {
  constructor(payload?: any) {
    super('MessageName', payload);
  }
}

Publish message

and publish message from B component

dispatcher.publish(new UpdateMessage('payload'));
// or
dispatcher.publish('UPDATE_MESSAGE', 'payload');

Receive message

Then in A component subscribe to dispatcher like this:

dispatcher.subscribe(UpdateMessage as any, (payload: any) => {
    this.actions.update....
});

// or

dispatcher.subscribe('UPDATE_MESSAGE', (payload: any) => {
  this.actions.update....
});

or you can listen for messages in A component like this:

dispatcher.listenTo<OptionalPayloadType>(UpdateMessage as any)
    .pipe(takeUntil(this.unsubscriber))
    .subscribe((payload: any) => {
        ...
    });

// or 

dispatcher.listenTo<OptionalPayloadType>('UPDATE_MESSAGE')
    .pipe(takeUntil(this.unsubscriber))
    .subscribe((payload: any) => {
        ...
    });

Last updated