Angular HttpClient映射对Model Class的响应

时间:2017-12-03 11:12:17

标签: angular typescript

你好。 我正在尝试使用新的HttpClient将响应映射到模型类。 但似乎我的回应永远不会最终拥有模型类中的函数。

我知道这不是正确的做法,但是如何将响应映射到模型类呢?

从我的Api服务获得:

  listSimple(): Observable<Array<Airport>> {
    return this.http.get<Array<Airport>>(this.airportUrl + 'list')
  }

在组件中的使用:

  getAirports(){
    this.airportApi.listSimple().subscribe(
      res => {
        this.airportList = res;
        console.log("Airport list: ", res);
      },
      err => {
        //@TODO Incorporate global error handeling and remove this
        console.error("An error occoured while fetching the airport list!");
      });
  }

模型类:

export interface Inms {
    get_name:Function;
    get_value:Function;
    get_children:Function;
}

export class Airport implements Inms{
  IATA:string;
  name:string;
  trips:number;
  children:any;

  constructor(){ }

  public get_name() {
    return this.name;
  }

  public get_value() {
    return this.IATA;
  }

  public get_children() {
    return this.children? this.children : null;
  }

}

我使用函数get_children的结果是:

_v.context.$implicit.get_children is not a function

我的解决方案: 这就是我结束操作映射的方法,如果有更好的或替代的解决方案,请告诉我!

  //Returns a simplifyed list of all airports
  listSimple(): Observable<Array<Airport>> {
    return this.http.get<Array<Airport>>(this.airportUrl + 'list')
      .map(array => array
        .map(airport => new Airport(airport.IATA, airport.name, airport.trips))
      )
  }

1 个答案:

答案 0 :(得分:0)

为什么不呢?

export interface IAirport {
  IATA:string;
  name:string;
  trips:number;
  children:any;
}
// then
listSimple(): Observable<IAirport[]> {
    return this.http.get<IAirport[]>(this.airportUrl + 'list')
  }