无法使用Angular2

时间:2016-04-14 07:54:00

标签: json angular angular2-http

我正在尝试遵循以下指示:https://angular.io/docs/ts/latest/guide/server-communication.html并以对象(而非json)的形式从服务器获取对象列表。

我有一个模型类(暂时简化):

export class Goal {
  id: number;
  title: string;
}

我试图通过服务类从服务器获取这些列表,如下所示:

export class GoalsService {

  constructor(public authHttp:AuthHttp) {
  }

  getGoals() {
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    return this.authHttp.get('<%= BACKEND_BASE_URL %>' + '/rrm/api/v1/goals', options)
      .map(res => {
          <Goal[]> res.json()
        }
      )
      .do(data => console.log(data))
      .catch(this.handleError);
  }
...

使用服务类的客户端是:

loadGoals() {
    this.goalsService.getGoals().subscribe(
      goals => this.goals = goals
    );
  }

请求正确,我回来了:

[{"id":1,"title":"target"}]

但是,在客户端内部subscribe内,goals变量始终未定义&#39;。

我试过调试它,这就是我得到的: enter image description here

其中告诉我json接收并正确解析,但将其转换为目标对象是不起作用的(除非我没有完全获得该机制)。

我做错了什么?

谢谢,

注意:我使用的authHttp服务是这个人:https://auth0.com/blog/2015/11/10/introducing-angular2-jwt-a-library-for-angular2-authentication/。它可以按预期在所有其他地方使用。所以我怀疑这是一个问题。

1 个答案:

答案 0 :(得分:3)

当您使用map箭头功能时,您应该return映射结果。

return this.authHttp.get('<%= BACKEND_BASE_URL %>' + '/rrm/api/v1/goals', options)
  .map(res => {
      return <Goal[]> res.json(); //return mapped object from here
    }
)

return this.authHttp.get('<%= BACKEND_BASE_URL %>' + '/rrm/api/v1/goals', options)
  .map(res => <Goal[]> res.json()) //or simply do map object directly