Angular2 / Typescript" map"两个可观察到一个接口

时间:2017-03-01 18:11:54

标签: angular rxjs typescript2.0 angular2-observables

将两个数据源合并到一个接口

时遇到一个小问题

有一个界面

export interface IProvince {
  code: number;
  name: string;
  svgData: string;
  part: number;
  color: string;
}

现在我有两个不同的数据源,一个为字段提供数据: [code,name,svgData,part] [color] 来自另一个observable。

getAllProvince(): Observable<IProvince[]>
  {
    return <Observable<IProvince[]>>this.http
      .get('url')
      .map((response: Response) => <IProvince[]>response.
      .catch(this.handleError)
      .finally(() => {
        this.loader.complete();
        console.log("Data: ", this.provinceData);
      });

  }
  getLegendData(): Observable<ILegend[]> {
    return Observable.of(this.legendData);
  }

  getStyleColorData(part: number) {
    let color: ILegend;
    return this.getLegendData().subscribe((items: ILegend[]) => color = items.find(p => p.part == part));
  }

问题在于,目前我缺乏数据[颜色]我不知道如何&#34;在飞行中&#34;从另一个函数中添加值。

这里我有函数:getStyleColorData(part:number)应该给我&#34; color&#34;在我从[getAllProvince()]传递[部分]之后。 问题:有两种简单的方法可以将这两种方法结合起来,或者我的方向错误吗?

答案和解决方案的答案:)

1 个答案:

答案 0 :(得分:0)

如果您有两个Observable(例如来自http请求,则可以将它们与Observable.combineLatestObservable.withLatestFrom合并。

尝试这样的事情:

getProvinces() {
  return this.http
    .get('url')
    .map(response => response.json() as IProvince[])
    .withLatestFrom(this.getLegendData(), (provinces, legendData) => ({provinces, legendData})
    .map(combined => combined.provinces.map(
            province => province.color = combined.legendData.find(legend => legend.part == province.part).color));
}

getLegendData() {
  return this.http
    .get('url2')
    .map(response => response.json() as ILegend[]);
}