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

标签 javascript typescript angular rxjs

我有一个 PartnersService,它在构造函数中从服务器加载合作伙伴数组列表。

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

当我得到合作伙伴列表时,一切都OK。 但我需要通过 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() 函数(无需回调)?

最佳答案

你可以尝试这样的事情:

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);
});

关于javascript - angular2 使用 Observable(Http) 无需重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36944269/

相关文章:

javascript - AngularJS 如何在服务和 Controller 之间设置双向数据绑定(bind)

javascript - 停止表格单元格扩展,或将输入设置为表格单元格的宽度

javascript - 如何使用 vb.net 代码从 javascript 调用 Wcf 服务?

html - 编译 Azure DevOps Widget : Can't resolve 'TFS/Dashboards/WidgetHelpers' 时出错

javascript - Angular 2 包含,指令内容到 "alt"

javascript - 使用 javascript 显示/隐藏脚本

javascript - 你如何将 monaco-editor 从只读设置为可写?

css - ReactJS+MaterialUI v1 自动嵌套列表填充

javascript - 使用 angular2 单击提交按钮时从一个页面导航到另一页面

java - Spring Boot 视频聊天