Angular> = 4.3,httpClient.get params为空

时间:2017-08-04 07:06:25

标签: angular angular-http

我正在尝试将Http个请求迁移到HttpClient个请求。 我能够迁移post个查询但我在迁移get查询时遇到问题。当我这样做时,我的后端没有分别收到任何参数,它告诉我参数没有提供并且是空的。

我做错了吗?

import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';

constructor(private httpClient: HttpClient) {}

findItems() {
   let params: HttpParams = new HttpParams();
   params.set('something', 'hello');

   this.httpClient.get<any[]>('http://localhost:3000/apath/', {params})
    .subscribe((results: any[]) => {
      console.log(results);
    }, (errorResponse: any) => {
       console.error(errorResponse);
    });
}

有什么想法吗?

2 个答案:

答案 0 :(得分:13)

目前HttpParams是不可变的,您应该设置如下所示的参数:

// for set method
let params: HttpParams = new HttpParams().set('something', 'hello');
// for append method
let params: HttpParams = new HttpParams().append('something', 'hello');

HttpParams setappend方法将使用params和{{1}新更新的实例覆盖原始set实例最后返回新实例。

所以我们可以在多行中完成,如下所示:

append

<强> Plunker demo

重要:

自Angular v5.0.0起,您可以使用let params: HttpParams = new HttpParams(); params = params.set('something', 'hello'); params = params.append('something2', 'hello2'); 中的fromObject同时添加多个参数。

HttpParamOptions

您也可以直接将const param = new HttpParams({fromObject: {aaa: '1', bbb: '222'}}); 参数设置为object种方法

HttpClient

请参阅demo,第二种方式,请检查浏览器的网络以确认参数已成功添加。

答案 1 :(得分:0)

HttpParams是不可变的。 set()创建并返回一个新的HttpParams实例,而不会改变在其上调用set()的实例。所以代码应该是

const params = new HttpParams().set('status', status);