angular2使用Observable(Http)而无需重新加载

时间:2016-04-29 17:28:34

标签: javascript typescript angular rxjs

我有一个在服务器的构造函数加载伙伴列表中的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()函数(没有回调)?

2 个答案:

答案 0 :(得分:2)

你可以尝试类似的东西:

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

以这种方式执行方法:

gapi.client.calendar.events.list()

答案 1 :(得分:1)

您也可以使用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);
}