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的答案和解决方案:)
如果有两个观测量(例如,从http请求,你可以用Observable.combineLatest
或Observable.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[]);
}
我试试这个,但是当做某事喜欢thah:L combineMapdata(){ Observable.combineLatest(this.getAllProvince(),this.getLegendData ())。subscribe((data:any []):void => {console.log(data); //盒 - 数据[0] //玻璃 - 数据[1] }); } } ii得到了“控制台/服务器垃圾邮件,请求每一秒钟,我相信它与某人observables –
我添加了一个例子,你可以尝试如果问题仍然存在,当你尝试这样? – magnattic
现在是:(Property'color '类型'IProvince'上不存在)。我相信当我做“第一次映射我的颜色停止存在于上下文中, –
什么是this.legendData?一个简单的数组?如何从ILegend获取一个颜色字符串? – magnattic
现在是Array,但应该是来自服务器的另一个数据。例如:{ 部分:1, 名: “Quantyl 1”, 颜色: “#B4572C” }, –