Angular4 从 Http 迁移到 HttpClient
Angular4 migrate from Http to HttpClient
我正在迁移我的 Angular 应用程序以使用现在新的 HttpClient,但我在获得与使用 Http 相同的结果时遇到了一些问题。希望大家能帮帮我。
这就是我使用 Http 所做的事情:
getAll() {
return this.http.get(environment.API_DOMAIN + environment.CURRENCY_API_URL).map(res => {
let response: ICurrenciesResponse = <ICurrenciesResponse> res.json();
response.result = <Currency[]> res.json().result.map(service => {
return new Currency(<ICurrency> service);
});
return response;
});
}
使用接口 ICurrenciesResponse 键入响应 如下所示:
import { IGenericResponse } from '../igeneric-response';
import { Currency } from '../../classes/currency';
export interface ICurrenciesResponse extends IGenericResponse {
result?: Currency[]
}
如您所见,接口扩展 IGenericResponse 并由货币数组组成 是定义的 class。为了正确设置此数组,我必须执行第二个映射,然后在其中创建一个新的 Currency 对象。这非常有效,到目前为止我对这个方法非常满意。
知道,当我迁移到 HttpClient 时,我有这个:
getAll(): Promise<ICurrenciesResponse> {
return this.http
.get<ICurrenciesResponse>(environment.API_DOMAIN + environment.CURRENCY_API_URL)
.toPromise();
}
但是我的货币数组没有正确设置为货币数组。 HttpClient 不是应该根据在 get 方法上定义为类型的接口来转换数据吗?
如果不是,实现我对 Http 所做的相同操作的最佳方法是什么?使用 subscribe() 而不是 toPromisse() 并按照我已经在做的方式处理数据?
提前致谢!
HttpClient
尝试为响应找到正确的内容类型,它不会根据响应中的数据为您创建实例。
您仍然需要使用 map
运算符并在其中创建实例。但是你必须删除 .json()
调用。
getAll() {
let url = environment.API_DOMAIN + environment.CURRENCY_API_URL;
return this.http
.get<ICurrenciesResponse>(url)
.map(response => {
if(Array.isArray(response.result) {
response.result = response.result.map(service => new Currency(service));
}
return response;
});
}
我正在迁移我的 Angular 应用程序以使用现在新的 HttpClient,但我在获得与使用 Http 相同的结果时遇到了一些问题。希望大家能帮帮我。
这就是我使用 Http 所做的事情:
getAll() {
return this.http.get(environment.API_DOMAIN + environment.CURRENCY_API_URL).map(res => {
let response: ICurrenciesResponse = <ICurrenciesResponse> res.json();
response.result = <Currency[]> res.json().result.map(service => {
return new Currency(<ICurrency> service);
});
return response;
});
}
使用接口 ICurrenciesResponse 键入响应 如下所示:
import { IGenericResponse } from '../igeneric-response';
import { Currency } from '../../classes/currency';
export interface ICurrenciesResponse extends IGenericResponse {
result?: Currency[]
}
如您所见,接口扩展 IGenericResponse 并由货币数组组成 是定义的 class。为了正确设置此数组,我必须执行第二个映射,然后在其中创建一个新的 Currency 对象。这非常有效,到目前为止我对这个方法非常满意。
知道,当我迁移到 HttpClient 时,我有这个:
getAll(): Promise<ICurrenciesResponse> {
return this.http
.get<ICurrenciesResponse>(environment.API_DOMAIN + environment.CURRENCY_API_URL)
.toPromise();
}
但是我的货币数组没有正确设置为货币数组。 HttpClient 不是应该根据在 get 方法上定义为类型的接口来转换数据吗? 如果不是,实现我对 Http 所做的相同操作的最佳方法是什么?使用 subscribe() 而不是 toPromisse() 并按照我已经在做的方式处理数据?
提前致谢!
HttpClient
尝试为响应找到正确的内容类型,它不会根据响应中的数据为您创建实例。
您仍然需要使用 map
运算符并在其中创建实例。但是你必须删除 .json()
调用。
getAll() {
let url = environment.API_DOMAIN + environment.CURRENCY_API_URL;
return this.http
.get<ICurrenciesResponse>(url)
.map(response => {
if(Array.isArray(response.result) {
response.result = response.result.map(service => new Currency(service));
}
return response;
});
}