2016-04-15 58 views
1

TL; DR:Angular2:可觀察訂閱VS單身會員

https://plnkr.co/edit/QP5skRU1MJ3ZoOtlA15I?p=preview

爲什麼要使用一個服務的本地變量在訂閱可觀察到該服務中?爲什麼它的混亂

例子:

在普拉克,你會看到我有兩個組件和服務。這兩個組件共享一個位於該服務中的Observable。

在服務中,我更新一個公共變量並將該值推送給觀察者。

這段代碼對我來說似乎多餘,但我在Angular2教程中看到了這一切。

的src/number.ts

this.num = { 
    num: new Date().getTime() 
}; 

this.observer.next(this.num); 

爲什麼我會做一個或其他?我更喜歡訂閱方式,但他們似乎做同樣的事情。我錯過了什麼?

注意: setInterval和NgZone垃圾僅用於演示目的。在現實生活中,這些數據來自HTTP,它會更新變量和/或推送給訂閱者。因爲我每秒都抓住時間,所以我也不得不使用NgZone。

回答

1

我猜這是關於什麼的,這是一個Observable你只會得到一個值,當一個事件被髮射但是你通常想要最後一個(當前)值立即並且後來不滿意更新。

你可以使用一個BehaviorSubject立即發射最後發射的值給新的訂閱者,或者如果你不太熟悉Rx,你可能會使用你的問題中提到的模式。這使您可以

this.prop = this.service.num; this.service.observable.subscribe(val => this.prop = val);

立即獲取最後一個值,並在它們出現在observable中使用時更新。

+1

啊!我現在看到了差異!通過使用'this.prop = 123'的視圖,您無法在更改值時進行更新。通過可觀察的,您可以控制何時更新,不是通過'next()'直到您準備好,或者通過檢查訂閱回調中的this.prop = 123'之前的值。 – oooyaya

+0

是的,那將是另一個用例。 –