Angular 4.3中的Http params

时间:2017-07-28 13:07:00

标签: angular http typescript

我正在尝试使用Angular 4.3推出的新http客户端。我已经检查了文档并使用了HttpParams类,但似乎没有工作或者我做错了什么。这就是我所拥有的:

delete(personId: string) {
    const params = new HttpParams();
    params.set('personId', personId);
    return this.http.delete(`${this.baseUrl}`, {
      params
    });
  }

但是在提出请求时,我的网址中没有查询参数 任何帮助将不胜感激

2 个答案:

答案 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)

HttpParams is immutable.

  

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 之类的常用功能,您可以轻松删除它或根据需要进行更改。