Angular2 /打字稿“地图”两个观测量到一个接口

Angular2 /打字稿“地图”两个观测量到一个接口

问题描述:

我有一个小问题,合并两个数据源到一个界面Angular2 /打字稿“地图”两个观测量到一个接口

有一个接口

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

现在我有两个不同的数据源,其中一个为我提供了以下字段的数据:[code,name,svgData,part][color]来自另一个可观察的数据。

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

问题是,目前我缺乏数据[颜色],我不知道如何“即时”添加另一个函数的值。

这里我有函数:getStyleColorData(part:number)应该给我“颜色”后,我[部分]从[getAllProvince()]。 问:有两种方法可以将这两种方法结合起来,或者我可能会走错方向?

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

+0

什么是this.legendData?一个简单的数组?如何从ILegend获取一个颜色字符串? – magnattic

+0

现在是Array,但应该是来自服务器的另一个数据。例如:{ 部分:1, 名: “Quantyl 1”, 颜色: “#B4572C” }, –

如果有两个观测量(例如,从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[]); 
} 
+0

我试试这个,但是当做某事喜欢thah:L combineMapdata(){ Observable.combineLatest(this.getAllProvince(),this.getLegendData ())。subscribe((data:any []):void => {console.log(data); //盒 - 数据[0] //玻璃 - 数据[1] }); } } ii得到了“控制台/服务器垃圾邮件,请求每一秒钟,我相信它与某人observables –

+0

我添加了一个例子,你可以尝试如果问题仍然存在,当你尝试这样? – magnattic

+0

现在是:(Property'color '类型'IProvince'上不存在)。我相信当我做“第一次映射我的颜色停止存在于上下文中, –