每次组件加载时,订阅代码都会逐步触发

时间:2019-08-29 17:43:06

标签: angular typescript rxjs

在组件的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();
}

但是,由于问题仍然存在,这似乎无济于事。

1 个答案:

答案 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)
}));