Angular Components在被销毁后仍然在监听订阅

时间:2018-05-07 18:34:20

标签: angular rxjs

Angular 5

我遇到的问题是,当我离开某个组件时,该组件仍在监听并根据服务订阅更新进行操作。

我的服务

export class GlobalVarsService {
  private selectedDepartment = new BehaviorSubject<number>(null);
  selectedDepartment$ = this.selectedDepartment.asObservable();

...
}

MyComponent的

ngOnInit() {
     this.globalVarsService.selectedDepartment$.subscribe( selectDepartment => {
        this.refreshReportData();
    });
}

我距离MyComponent只需3次点击,但如果我更新selectedDepartment,则订阅仍会启动,this.refreshReportData将会执行。显然我不想要这个,因为它是额外的HTTP调用,完全没必要。

我尝试实现onDestroy来验证组件销毁是在我导航的时候发生的。所以从我的角度看,我的被破坏的组件仍然是活动的,并且正在监听订阅事件。 unsubscribe上还没有this.globalVarsService.selectedDepartment$方法,因此我无法将其添加到我的onDestroy方法中。

我该怎么办?

1 个答案:

答案 0 :(得分:3)

是的,您必须在ngOnDestroy中取消订阅,但如果您使用Async Pipe,它将自动处理

xhook