2016-11-28 305 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