我正在尝试使用Angular 4.3推出的新http客户端。我已经检查了文档并使用了HttpParams
类,但似乎没有工作或者我做错了什么。这就是我所拥有的:
delete(personId: string) {
const params = new HttpParams();
params.set('personId', personId);
return this.http.delete(`${this.baseUrl}`, {
params
});
}
但是在提出请求时,我的网址中没有查询参数 任何帮助将不胜感激
答案 0 :(得分:18)
params现在是不可变的所以你必须在启动新的HttpParams 时设置它们,这样每个set()都会返回一个新的实例并应用这些更改。尝试
const params = new HttpParams()
.set('personId', personId);
以下是涵盖4.3 - https://angular.io/guide/http#headers
的标题和网址参数的文档编辑:我想更新我的回答,并说明在启动HttpParams类时不必设置参数。例如,如果你需要在for循环中或在HttpParams初始化之外设置参数,你可以通过
进行设置。const params = new HttpParams()
.set('personId', personId);
params = params.set('personName', personName);
如文件所述:
HttpHeaders类是不可变的,因此每个set()都返回一个新实例并应用更改。
答案 1 :(得分:1)
set()
创建并返回一个新的HttpParams实例,而不会改变调用set()
的实例。
因此代码应为
const params = new HttpParams().set('personId', personId);
这是我在使用这个新的HttpParams时遇到的另一件事,有时我们会传递n个参数,那时使用转换参数对象的某个函数(我们以前使用过)是很有用的Angular 4.3)到HttpParams。
我建议您在常用服务中使用 toHttpParams 功能。因此,您可以调用该函数将对象转换为 HttpParams 。
/**
* Convert Object to HttpParams
* @param {Object} obj
* @returns {HttpParams}
*/
toHttpParams(obj: Object): HttpParams {
return Object.getOwnPropertyNames(obj)
.reduce((p, key) => p.set(key, obj[key]), new HttpParams());
}
更新:
自5.0.0-beta.6(2017-09-03)以来,他们添加了新功能(accept object map for HttpClient headers & params)
可以直接传递对象而不是HttpParams。
这是另一个原因,如果您使用了上面提到的 toHttpParams 之类的常用功能,您可以轻松删除它或根据需要进行更改。