我创建了一个服务,并从我的组件
订阅 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值并再次打开该组件时,使用不同的参数值而不是出现问题。我想我已经订阅了它再次订阅重复订阅者的服务主题。
答案 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();
});
}