2016-12-15 25 views
-1

是否有可能從observable中獲取最新的元素,就好像我正在訂閱它並將該值用於操作一樣?從Angular2中的observable獲取最新價值

我試過了下面的代碼,但是不起作用。

this.af.database.list('photos') 
    .single() 
    .do(res => console.log(res)) 
    //I want to navigate to another routerLink in the do statement 

回答

0

所以,我要做一個假設。你想要長時間觀察的最新值。

要做到這一點,您需要確保observable是一個BehaviorSubject(始終具有可供使用的初始值),或者已使用publishReplay運算符重新進行設置。在使用publishReplay時,您會返回一個ConnectableObserbable,請務必調用connect。

完成此操作後,可以使用take(1)限制爲單個元素。

例如,假設您想根據最近的點擊位置採取一些操作。

var source = Observable.fromEvent(document, 'click') 
    .publishReplay(1); 
source.connect(); 

後來

source.take(1).subscribe(ev => console.log(`(${ev.clientX}, ${ev.clientY})`)); 
+0

感謝您的。在我的示例中,observable是由Firebase在Angular2中返回的純觀察值。在這種情況下是否可以複製你的模式? – user3642173