清除消息服务 Click EventEmitter 消息历史

Clear MessageService ClickEventEmitter message history

我在共享 header 中有一个组件,只要单击它就会发出带有消息的单击事件。我有多个包含组件的页面,每个组件都订阅此 MessageService 并根据点击事件采取行动。

问题是,当我切换到新页面时,所有 以前的消息和新消息都被广播。

有没有办法在发送之前清除旧消息?

Header 按钮代码:

<div id="applyDate">
    <button (click)="applyClick()" id="applyBtn" class="btn btn-success btn-sm">Apply</button>
</div>

applyClick(){
    this.messageService.clickEventEmitter.emit("Start^"+this.start+"|End^"+this.end);
}

组件订阅:

this.subscription = this.messageService.clickEventEmitter.subscribe(message => {
    let segs = message.split("|");
    this.start = segs[0].split("^")[1];
    this.end = segs[1].split("^")[1];

    console.log(this.start);
    console.log(this.end);
});   

当我跳转到 "new page"(单页应用程序)时。上一页上发送的所有消息都已发送并记录。

示例:

  1. Click Header
  2. Logs start and end (2 logs - expected)
  3. Click to new tab
  4. Click Header
  5. Logs start, end, start, end (4 logs - not expected)

第一个问题是当组件被销毁时我没有销毁订阅:

ngOnDestroy(){
    this.subscription.unsubscribe();
}

更大的问题是,由于我正在向所有订阅的组件广播类似的消息,它们都在接收消息并对其进行操作。我决定在 收到 一条消息后 重置 每个订阅,这解决了问题。

subscribe = () => {
    this.subscription = this.messageService.clickEventEmitter.subscribe(message => {
        let segs = message.split("|");
        this.start = segs[0].split("^")[1];
        this.end = segs[1].split("^")[1];

        console.log(this.start);
        console.log(this.end);
        this.resetSubscription();
    });  
}

resetSubscription = () => {        
    this.subscription.unsubscribe();
    this.subscribe();
}