2016-11-28 306 views
1

我有一个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 

我的问题

  1. 如何在订购I unsubscribe后订阅订阅?如果不可能,你能想出其他办法来做到这一点吗?

回答

1

错误是正确的。你打电话:

this.lineOrdersSub[line.$key] = this.af.d ... .subscribe(...); 

这意味着你要指定一个Subscription对象this.lineOrdersSub[line.$key]。不是可观察的。

然后调用.unsubscribe()明显按原样工作。当您尝试呼叫subscribe()时,它失败,因为订阅对象没有subscribe()方法。

您必须订阅Observable。

+0

感谢martin,纠正我,如果我错了 - 我将不得不声明1.订阅,2.使用2个不同的变量观察相同的元素?另外,我是否必须在我的初始订阅中再次写入所有内容? – TheUnreal

+0

@TheUnreal如果你想能够订阅和取消订阅,你总是需要两个变量。一个持有Observable(这就是你要调用'subscribe(...)'的地方),另一个持有从'subscribe(...)'调用返回的Subscription对象。这就是你要调用'unsubscribe()'的地方。 – martin