簡體   English   中英

訂閱Angular2中的Observable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM