如何将AngularJS2响应对象分配给类对象

时间:2017-01-09 07:19:54

标签: angular

我正在使用angularJS2中的一个项目,并使用带有observable的$ http来解析来自其他API的JSON,这是我的代码。

服务

getSingleKey(id:any){

    var headers = new Headers();
    headers.append('content-Type','application/json');

    return this.http.get(
        'http://192.168.1.59/keyapp/api/getKeyspiration/'+id+'.json'
        ).map(res => res.json());       

}

组件:

private dataKey: Object = {};

this.keyService.getSingleKey(this.id)
      .subscribe( 

        data=> 
      {
          console.log(data.data),
          this.dataKey=data.data
      },
      error=>console.log(error)
      );

的console.log(this.dataKey);

我收到以下回复:

GET 
localhost/keyapp/api/getKeyspiration/15.json [HTTP/1.1 200 OK 398ms]

//对console.log(data.data)的响应

Object { k_id: 15, k_u_id: 5, k_type: 3, k_title: "vaibhav", k_text: "", k_data: "2024067187.png", k_thumb: "", k_added_date: "2016-11-24T06:10:23+0000" }

// response for  console.log(this.dataKey)

Object {  }

简而言之,我正在获取响应数据但是我如何将响应对象分配给我的类对象,我错过了我的代码中的内容。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

由于@JBNizet在评论部分提到了问题,您正在记录一个异步期望的值。

您的getSingleKey()方法是一种异步方法,这意味着您无法猜出响应何时到达(网络速度等)。

您必须在异步函数的回调中执行您计划对响应做的任何事情:

private dataKey: Object = {};

this.keyService.getSingleKey(this.id)
      .subscribe( 

        data=> 
      {
          console.log(data.data),
          this.dataKey=data.data;
          console.log(this.dataKey); //will be defined since it is in the async functions
          //callback scope, so do whatever you want to do with this.dataKey here
      },
      error=>console.log(error)
      );
console.log(this.dataKey); //will be undefined since it is out of the async functions callback scope