从@ angular / http迁移到@ angular / common / http

时间:2018-03-24 05:17:31

标签: angular-cli angular-httpclient

我正在从" @ angular / http"迁移一个angular-cli应用程序。到" @ angular / common / http"但是在使它工作时遇到了一些问题。

我有一个函数可以对我的API发出请求并返回以下json。

if(response.error == "false"){

我将它映射到类

{"Categories":[
   {"name":"my first category","routetype":"category"},
   {"name":"my second category","routetype":"category"}
]}

当前代码(工作):

export class Category {
    name: string;
    routetype: string;
}

新代码(不工作)。

import { Http, Response } from '@angular/http';
...
getCategories(context: SiteContext): Observable<Array<Category>> {
    return this.http.get(routes.getCategories(context), { cache: true })
      .map((res: Response) => <Array<Category>>res.json().Categories)
      .do(data => console.log(data))
      .catch(this.handleError);
  }

在vs.code中,我收到此错误消息:

import { HttpClient } from '@angular/common/http';
...
getCategories(context: SiteContext): Observable<Array<Category>> {
    return this.httpClient.cache().get(routes.getCategories(context))
      .map((res: Response) => <Array<Category>>res.json().Categories)
      .do(data => console.log(data))
      .catch(this.handleError);
  }

在这一行:

[ts] Property 'Categories' does not exist on type 'Promise<any>' 

2 个答案:

答案 0 :(得分:2)

Angular 4.3+ HttpClient has a completely different API。它已经为你解析了json。

所以你的代码看起来应该更像:

this.httpClient.get<Categories>().map(data => data.Categories).do(data => console.log(data).catch(this.handlError);

(您的响应类型属于旧API)

答案 1 :(得分:0)

在进行等效迁移时,对我有什么帮助,生成一个小jhipster测试项目并分析如何使用新的HttpClient生成jhipster实体。不是一个答案,但可能有所帮助。