Angular2服务不从json检索嵌套数组

时间:2017-04-12 13:04:26

标签: arrays json angular

我花了很多时间来解决这个问题。

我让webapi返回json,如:

{
  "id": 1,
  "name": "testName",
  "address": [
    {
      "id": 6,
      "address_name": 'testname'
    },
    {
      "id": 6,
      "address_name": 'testname'
    }
  ]
}

在angular2我有这样的服务:

public getRoutes():Observable<Route[]>
{
      return this.http.get(this.BASE_API_URL+'/Routes')
             .map(res=>res.json());
}

在组件中我有一段代码来检索数据到数组变量

this.routeService.getRoutes().subscribe(
       (routes) => {
           for(let route of routes){
                mainInstance.routes.push(route);
           }
           console.log("Routes filled");
       }
);

json结果包含填充的简单属性,如id或name,但内部数组地址为空。你知道伙计我工作不好吗? 感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

在我看来,你正在返回一个带有嵌套数组的对象,但是你试图将父对象本身视为一个数组。

如果您提供服务退货

{
  "id": 1,
  "name": "testName",
  "address": [
    {
      "id": 6,
      "address_name": 'testname'
    },
    {
      "id": 6,
      "address_name": 'testname'
    }
  ]
}

然后更新服务功能的签名:

public getRoutes():Observable<Route>
{
      return this.http.get(this.BASE_API_URL+'/Routes')
             .map(res=>res.json());
}

其中Route是一个如下所示的界面:

export interface Route{
   id:number;
   name:string;
   address: Address[];
}
export interface Address{
   id: number;
   address_name: string;
}

如果您想在组件中使用address数组,那么访问该属性,如下所示:

this.routeService.getRoutes().subscribe(
       routes => {
           for(let route of routes.address){
                mainInstance.routes.push(route);
           }
           console.log("Routes filled");
       }
);

这样您就可以访问address字段,特别是数组,而不是父对象。