订阅取消订阅()
问题描述:
我有一个observables数组。订阅取消订阅()
在我的ngOnInit()
方法中,我初始化了我的订阅。
this.lineOrdersSub[line.$key] = this.af.database.list(this.businessService.path + 'line_orders/' + line.$key)
.subscribe((lineOrders) => {
this.line_orders[line.$key] = lineOrders;
});
我也有每个订阅复选框。当勾选复选框(默认)时,订阅处于活动状态(订阅新数据)。
当我取消复选框,我这样做:
unCheckmethod() {
this.lineOrdersSub[line.$key].unsubscribe(); //Unsubscribe to my subscription
this.line_orders[line.$key] = null; // Remove the data I get after the subscription (See first code snippet)
}
我不选方法效果很好,但在我试图启动订阅再次:
checkMethod() {
this.lineOrdersSub[line.$key].subscribe();
}
我得到:
this.lineOrdersSub[line.$key].subscribe is not a function
我的问题:
- 如何在订购I
unsubscribe
后订阅订阅?如果不可能,你能想出其他办法来做到这一点吗?
答
错误是正确的。你打电话:
this.lineOrdersSub[line.$key] = this.af.d ... .subscribe(...);
这意味着你要指定一个Subscription
对象this.lineOrdersSub[line.$key]
。不是可观察的。
然后调用.unsubscribe()
明显按原样工作。当您尝试呼叫subscribe()
时,它失败,因为订阅对象没有subscribe()
方法。
您必须订阅Observable。
感谢martin,纠正我,如果我错了 - 我将不得不声明1.订阅,2.使用2个不同的变量观察相同的元素?另外,我是否必须在我的初始订阅中再次写入所有内容? – TheUnreal
@TheUnreal如果你想能够订阅和取消订阅,你总是需要两个变量。一个持有Observable(这就是你要调用'subscribe(...)'的地方),另一个持有从'subscribe(...)'调用返回的Subscription对象。这就是你要调用'unsubscribe()'的地方。 – martin