我正在尝试将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);
});
}
有什么想法吗?
答案 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 的set
和append
方法将使用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);