簡體   English   中英

angular2使用Observable(Http)無需重新加載

[英]angular2 work with Observable(Http) without reloading

我有一個PartnersService,它在服務器上的合作伙伴數組的構造函數加載列表中。

this.partners = this._http.get('/app/partners/partners.data.json')
            .map(this.extractData)
            .catch(this.handleError);

當我得到合作伙伴列表時,一切正常。 但是我需要通過ID獲得伙伴。 在這種情況下,我將函數與回調一起使用

getPartner(id:number, callback:(partner:Partner)=>void):void {
    this.partners.subscribe(partners=> {
        for (let partner of partners) {
            if (partner.id == id) {
                callback(partner);
            }
        }
    });
}

在瀏覽器控制台中,我看到無論何時我調用subscribe ,angular2將請求發送到服務器。 我可以做些什么來不發送請求嗎? 也許存在更好的方法來創建getPartner()函數(不getPartner() )?

您可以嘗試這樣的事情:

getPartners() {
  if (this.partners) {
    return Observable.of(this.partners);
  } else {
    return this._http.get('/app/partners/partners.data.json')
        .map(this.extractData)
        .catch(this.handleError)
        .do(partners => {
          this.partners = partners;
        });
  }
}

getPartner(id:number):Observable<partner> {
  this.getPartners().map(partners => {
    return partners.find(partner => (partner.id == id));
  });
}

並以這種方式執行方法:

this.service.getPartner('some id').subscribe(partner => {
  console.log(partner);
});

您也可以使用publishLast()捕獲事件。

constructor() {
  this.partners = this._http.get('/app/partners/partners.data.json')
        .map(this.extractData)
        .catch(this.handleError)
        //shares the subscription with all observers so you don't get repeated
        //calls and caches the result.
        .publishLast();
  //Initiates the http call
  this.connection = this.partners.connect();
}

getPartner(id:number):Observable<partner> {

  return this.partners
             //Convert Observable<partner[]> to Observable<partner>
             .flatMap(x => x)
             .filter(p => p.id === id);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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