[英]Subscribe to Observable in Angular2
我有一個函數,可以記住以前的網址
prevId () {
let name, id, lat, lng;
this.router.events
.filter(event => event instanceof NavigationEnd)
.subscribe(e => {
console.log('prev:', this.previousUrl);
this.previousUrl = (e as NavigationEnd).url;
}
如果可能的話,我想以Observable風格重寫它,但是我嘗試的所有方法都無法正常工作。 有可能解決嗎? 您能否也請給我一些有關Observable的好文章,因為我只是初學者,而且這個話題似乎很難。
UPD:稍后我需要在函數外部添加usr數據,這就是為什么我需要Observer的原因。
例如
myFun(a) {
console.log(a);
}
myFun(this.previousUrl);
如果您唯一需要的是在函數外部使用url,則可以執行以下操作:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/take';
prevId(): Observable<NavigationEnd> {
return new Observable(observer => {
this.router.events
.filter(event => event instanceof NavigationEnd)
.take(1)
.subscribe(e => {
observer.next(e as NavigationEnd);
observer.complete();
});
});
}
然后,您必須像這樣調用該函數:
prevId().subscribe(navigationEndEvent => {
this.previousUrl = navigationEndEvent.url;
});
我制作了這個示例,以為您在調用prevId()
時只需要previousUrl信息,因此,我放置了.take(1)
運算符,並將其命名為observer.complete()
。
當第一個值來自.take(1)
會自動取消訂閱到this.router.event
的訂閱。
而且無論何時在返回的Observable中, observer.complete()
都將取消訂閱所有訂閱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.