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)
)
)
}
map
不再存在
pipe
,如何使用?
HttpResponse
不再有 json
方法
我想我应该可以使用 .get
来获得一个 any
object 那将是我的 JSON object (因为 .get
文档说),但是如何?
我如何使用 pipe
或 map
(或两者)来管理由 .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;
});
}
}
我曾经在 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)
)
)
}
map
不再存在pipe
,如何使用?HttpResponse
不再有json
方法
我想我应该可以使用 .get
来获得一个 any
object 那将是我的 JSON object (因为 .get
文档说),但是如何?
我如何使用 pipe
或 map
(或两者)来管理由 .get
编辑的 JSON object return自定义解析和 return collection 或 collection?
[解决方法]
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;
});
}
}