在组件的ngOnInit
中,我有以下内容:
public Subscription: Subscription;
ngOnInit() {
this.subscription = this.myService.currentData.subscribe( i => {
this.currentData = i;
this.function(this.currentData)
});
}
当我的组件加载时,我让它订阅了服务中的一些数据以供以后在函数中使用。第一次加载效果很好。但是,当我加载到另一个模块然后返回时,该功能将触发两次。每次我重复此过程时,功能都会触发并递增。意思是,如果我进出模块说5次,该功能将关闭5次。
我试图解决此问题的方法是像这样向ngOnDestroy
添加取消订阅:
ngOnDestroy() {
this.subscription.unsubscribe();
}
但是,由于问题仍然存在,这似乎无济于事。
答案 0 :(得分:1)
存在两个问题。首先,我是错误地声明了我的订阅。
代替此:
public Subscription: Subscription;
这是需要输入的内容:
public Subscription = new Subscription();
此外,我没有将我的订阅等同于我的订阅语句,而是切换到了.add()。这使我可以将订阅对象分配给所有订阅者,然后一次性取消订阅:
this.Subscription.add(this.myService.currentData.subscribe( i => {
this.currentData = i;
this.function(this.currentData)
}));