Observable创建重复的订阅者角度5

时间:2018-03-29 14:16:07

标签: angular rxjs observable

我创建了一个服务,并从我的组件

订阅
 select distinct a.*, b.first_name_initial, b.last_name
 from tablea a
 left join tableb b on a.reference = b.reference
 order by a.reference, a.order

我的组件具有订阅功能

deleteSelected(action) {
    let data = {
      action: action,
      filterMessages: []
    }
    data.filterMessages = this.state.messages.filter((it) => it.selected);
    if (data.filterMessages.length > 0) {
      **this.messages.next(data);**
    } else {
      this.messageDetail.next(data);
    }
  } 

我还在ngOnDestroy上取消订阅此功能 但是函数调用自身多次出现问题,我认为这是因为重复订阅。

当第一次组件加载自己的工作正常时,但当我更改params值并再次打开该组件时,使用不同的参数值而不是出现问题。我想我已经订阅了它再次订阅重复订阅者的服务主题。 this is the screenshoot

2 个答案:

答案 0 :(得分:2)

我认为您只是在没有清理的情况下丢失对该订阅的引用。只需检查它是否已设置并在继续之前将其清除。

if (this.messageSub) {
    this.messageSub.unsubscribe();
}

this.messageSub = this.googleService.messages.subscribe(message =>

答案 1 :(得分:1)

您可以创建一个订阅数组,并在ngOnDestroy上取消订阅所有订阅:

private subs: Subscription[] = [];

this.subs.push(
    this.messageSub = this.googleService.messages.subscribe(n => {
        //your code here
    });
}

ngOnDestroy() {
    this.subs.forEach(n => {
        n.unsubscribe();
    });
}