Angular 2路由器参数发出多个http调用

时间:2017-02-28 16:37:35

标签: angular angular2-routing angular2-http

我在Angular中有一条路由,我传递id来从我的数据库加载一个元素。在我的组件中,我使用以下代码加载元素:

this.route.params
        .map((params: Params) => params['id'])
        .switchMap((id: number) => this.service.getElement(id))
        .catch((e) => {
            return Observable.throw(e);
        })
        .subscribe((data: Models.IElement) => {
            this.element= data as Models.IElement;
            this.setTitle();
        }, () => this.router.navigate(['/']));

this.service.getElement(id)进行http调用并返回Observable。一切顺利。我现在的问题是我想发出第二个http调用,我不知道在哪里添加第二个服务http调用的代码(它与getElement的方法类似,接收{{} 1}}作为参数)。

更多信息:理想情况下,第二次http呼叫将与id呼叫并行发出。它仅取决于getElement中的id

如何使用Observables来完成这项工作?有没有办法让它发挥作用?

1 个答案:

答案 0 :(得分:1)

使用@ Maxime的评论我带来了以下代码:

this.route.params
        .map((params: Params) => params['id'])
        .switchMap((id: number) => {
            this.id = id;
            return Observable.forkJoin([this.service.getElem(id), this.service.getElemDocs(id)]);
        })
        .catch((e) => {
            return Observable.throw(e);
        })
        .subscribe(([elem, documents]) => {
            this.elem= elemas Models.IElement;
            this.elemDocuments = documents;
            this.setTitle();
        }, () => this.router.navigate(['/']));

这会同时启动两个调用,并等待两者的完成。