我有问题,当我去不同的页面并将银行返回到第一页这个组件时:
ngOnInit() {
this.getModal();
}
getModal() {
this.subscription = this.sharedService.itemEdit$.subscribe((bank: any) => {
console.log("TEST")
this.subscription.unsubscribe();
});
}
即使我只调用一次发射服务,我也会得到多个子信息。
任何人都知道什么可能是个问题?
答案 0 :(得分:3)
你需要在Angular破坏指令/ component之前取消订阅ngOnDestroy
内部。检查Angular Lifecycle hook
ngOnDestroy() {
if(this.subscription) {
this.subscription.unsubscribe();
}
}
答案 1 :(得分:0)
ranakrunal9's answer的替代方案,如果您有多个订阅可能会有所帮助,就是设置销毁的$ -trigger并使用.takeUntil(this.destroyed$)
:
class SomeComponent {
destroyed$ = new Subject();
ngOnInit() {
this.sharedService.itemEdit$
.takeUntil(this.destroyed$) // this will automatically complete the stream when destroyed and therefor close the subscription
.subscribe(...);
this.sharedService.otherStream$
.takeUntil(this.destroyed$)
.subscribe(...);
this.sharedService.streamThree$
.takeUntil(this.destroyed$)
.subscribe(...);
}
ngOnDestroy() {
this.destroyed$.next();
}
}
作为补充说明:尝试在组件中避免手动订阅,通常会有一个组件显示数据,可以使用async
-pipe来处理{自动{1}}和subscribe
,因此您不必担心这一切。
如果正在进行永久性事务(如后台任务),请使用服务。