我正在从订阅中获取响应,但是当我更改路线并返回到我的组件时,数据仍然存在。所以即使在 ngOnDestroy 中使用取消订阅后我仍然收到数据。
这是我的代码片段:
服务:
sendDueDatetoPayments = new BehaviorSubject<any>(null);
communicateDueDatetoPayments(msg) {
this.sendDueDatetoPayments.next(msg);
}
TS代码:
dueDateSubscription: Subscription = new Subscription();
ngOnInit(){
this.listenDueDateRes();
}
listenDueDateRes() {
this.dueDateSubscription = this.sharedService.sendDueDatetoPayments.subscribe((res: any) => {
console.log(res)
if (res) {
//do something
}
});
}
ngOnDestroy() {
this.dueDateSubscription?.unsubscribe();
}
你应该写:
import { Component, OnInit, OnDestroy } from '@angular/core';
export class MyComponent implements OnInit, OnDestroy {
...
}
如果没有更多代码,很难说还要看看其他组件中相同
BehaviorSubject
的可能订阅
解决大多数取消订阅问题的快速方法是在组件中使用
Subject
;
import { Component, OnInit, OnDestroy } from '@angular/core';
...
export class MyComponent implements OnInit, OnDestroy {
destroy$ = new Subject<true>()
...
ngOnInit(){
this.sharedService.sendDueDatetoPayments.pipe(
takeUntil( this.destroy$ ),
).subscribe((res: any) => {
console.log(res)
if (res) {
//do something
}
});
}
ngOnDestroy () {
this.destroy$.next( true );
}
}