我在理解如何转换我的 json 响应以适应我的多选界面时遇到了一些问题。
这是我从 api 得到的响应:
[
{
"TransportTypeId": 1,
"Code": "RT ",
"Name": "Round Trip "
},
{
"TransportTypeId": 2,
"Code": "N/A ",
"Name": "UnAllocated "
},
{
"TransportTypeId": 3,
"Code": "OWOut ",
"Name": "OneWay Out "
},
{
"TransportTypeId": 4,
"Code": "OWHome ",
"Name": "OneWay Home "
}
]
这是我试图将其映射到的界面:
export interface IMultiSelectOption {
id: any;
name: string;
isLabel?: boolean;
parentId?: any;
params?: any;
classes?: string;
}
我想映射TransportTypeId
到id
和Name
到name
。
正如我所说,我正在使用HttpClient
Angular 4 中的新功能,并且在找到任何这样的示例时遇到了一些困难。
这是我的获取功能:
getTransportTypes(): Observable<TransportType> {
let options: TransportType;
let multiselect: IMultiSelectOption
let requestUri = '/BaseData/TransportTypes';
debugger;
return this.http.get<TransportType>(`${this.flighttransportcapacityUrl}${requestUri}`)
}
这是返回响应并将其映射到与响应属性完全相同的 TransportType:
export class TransportType{
TransportTypeId: number;
Code: string;
Name: string;
}
这工作正常,但我认为应该有一些更简单的方法将响应转换为IMultiSelectOption
then 以循环 get 函数的结果?
包括我的肮脏方式。
this.base.getTransportTypes().map(item => this.convertToMultiSelect(item)).subscribe(options => this.transportOptions = options)
和转换函数:
convertToMultiSelect(item: any): IMultiSelectOption[] {
debugger;
let v = item;
let options = [];
for (var i = 0; i < item.length; i++) {
options.push({ id: item[i].TransportTypeId, name: item[i].Name})
}
return options;
}