Angular 8 中的 Response.json() 在哪里?

Where is Response.json() in Angular 8?

我曾经在 Angular 4/5 中这样做:

import { Http, Headers } from "@angular/http"

public listTemplates(): Observable<EmailTemplate[]> {
    let url = `${this.apiUrl}/templates`
    this.http.get(url).map(
        response => this.parseTemplates(response.body)),
        error => new ErrorObservable(error)
    )
}

现在,对于 Angular 8,我正在尝试使用 HttpClient class:

import { HttpClient, HttpResponse } from "@angular/common/http"
import { Observable } from "rxjs"
import { ErrorObservable } from "rxjs/observable/ErrorObservable";

public listTemplates(): Observable<EmailTemplate[]> {
    let url = `${this.apiUrl}/templates`
    return this.http.get(url)
        .pipe( // ??
        map(  //??
            response => this.parseTemplates(response.body)),  // ?? HttpResponse
            error => new ErrorObservable(error)
        )
    )
}
  1. map 不再存在
  2. pipe,如何使用?
  3. HttpResponse 不再有 json 方法

我想我应该可以使用 .get 来获得一个 any object 那将是我的 JSON object (因为 .get 文档说),但是如何?

我如何使用 pipemap(或两者)来管理由 .get 编辑的 JSON object return自定义解析和 return collection 或 collection?

的 Observable

[解决方法]

import { HttpClient, HttpResponse } from "@angular/common/http"
import { Observable } from "rxjs"
import { ErrorObservable } from "rxjs/observable/ErrorObservable"
import { map } from 'rxjs/operators'

    public listTemplates(): Observable<EmailTemplate[]> {
        let url = `${this.apiUrl}/templates`   

        return this.http.get(url).pipe(
            map(
                data => this.parseTemplates(data),
                error => new ErrorObservable(error)
            )
        )
    }

在我需要检查 HTTP 状态或某些 HTTP header 的情况下,我仍然不知道如何获取 HttpResponse。我知道 get 是 returning 是由函数 returned 类型驱动的(因为 pipe 调用)。
我尝试使用 get<HttpResponse<any>> 但没有成功。

pipe 对来自 rxjs 的运算符进行分组。任何运算符 returns 一个可观察对象。 为了使用 map 你需要导入它。

import { map } from 'rxjs/operators';

这是一个类似于您的用例的工作示例。我得到一个 JSON 对象数组,并将它们 convert/parse 到我的数据接口数组 (GeneratorOffer):

getGeneratorOffers(): Observable<GeneratorOffer[]> {
  return this.http.get<any[]>('shop/offers').pipe(
    map(
      jsonArray =>
        jsonArray.map(jsonOffer => {
          try {
            return buildGeneratorOffer(jsonOffer);
          } catch (error) {
            console.error(`Offer could not be parsed: ${error}, json: ${JSON.stringify(jsonOffer)}`);
          }
        }),
      catchError(err => {
        console.error('Offers could not be loaded', err);
        return of([]);
      })
    )
  );
}

每个 JSON 对象的实际解析发生在 buildGeneratorOffer()

所以,Angular 9 中没有 response.json,我想是因为我搜索了很多。 但是我们可以直接将响应对象转换为所需的类型并使用它,就像在下面的示例中使用响应对象作为数组来获取我的数组中的数据。

   export class PostsComponent{
    posts : any[];
      constructor(http : HttpClient){
          http.get('https://jsonplaceholder.typicode.com/posts')
                  .subscribe((response:any[]) => {
                      this.posts=response;
                  });
      }
    }