如何在 HttpClient "get" 方法中传递 URLSearchParams - Angular 5
How to pass URLSearchParams in the HttpClient "get" method - Angular 5
我将 Angular 4.2 与 Http 服务一起使用,并且我使用了像这样的 get 方法,其中 params 是一个 URLSearchParams对象:
this.http.get(url, {headers: this.setHeaders(), search: params})
我想迁移到 Angular5。
http 现在是 HttpClient 对象,就像 angular 团队推荐的那样。
'search' 键出错。
你知道如何将 Http 迁移到 HttpClient 服务吗?
谢谢。
Angular 4路:
this.http.get(url, {headers: this.setHeaders(), search: params})
Angular 5路:
import { HttpClient, HttpParams } from '@angular/common/http';
let params = new HttpParams().set('paramName', paramValue);
this.http.get(url, { params: params })
多个参数:
// Initialize Params Object
let Params = new HttpParams();
// Begin assigning parameters
Params = Params.append('firstParameter', firstVal);
Params = Params.append('secondParameter', secondVal);
从 Angular 4.3 开始,您可以像这样使用 HttpClient
:
import { HttpClient,HttpHeaders, HttpParams } from '@angular/common/http';
constructor(private httpClient: HttpClient) { }
getData(){
let headers = new HttpHeaders();
headers = headers.append('header-1', 'value-1');
headers = headers.append('header-2', 'value-2');
let params = new HttpParams();
params = params.append('param-1', 'value-1');
params = params.append('param-2', 'value-2');
this.httpClient.get("/data", {headers , params })
}
HttpParams
和 HttpHeaders
是不可变的 类 所以在每次调用 set
或 append
方法后它们 return 一个新的实例为什么你应该这样做:params = params.append(...)
以下是更改,您需要做的是:
将旧的 Http 导入替换为:
从“@angular/common/http”导入 { HttpClient };
创建 HttpClient 对象如下:
构造函数(
受保护的 httpClient: HttpClient,
){}
现在搜索参数的实现方式如下:
public get(searchParam: string): Observable {
return this.httpClient.get(${this.URL}/${searchParam}
);
}
或:
public get(searchParam: string): Observable<object> {
let headers = new Headers({ 'Content-Type': 'application/json' });
let myParams = HttpParams().set("id", searchParam);
let options = new RequestOptions({ headers: headers, method: 'get', params: myParams });
return this.http.get("this.url",options)
.map((res: Response) => res.json())
.catch(this.handleError);
}
我遇到过需要将多个参数传递给 api 的情况。唯一对我有用的是在 HttpParams 对象初始化期间在链接在一起的同一行中调用 set() 方法时:
public get(userid: string, username: string): Observable<object> {
let headers = new Headers({ 'Content-Type': 'application/json' });
let myParams = HttpParams().set("id", userid).set("username", username);
let options = new RequestOptions({ headers: headers, method: 'get', params:
myParams });
HttpParams 有两个方法 set(string, string) & append(string, string)。
设置明确 - 文档:替换参数的值:
let httpParams = new HttpParams();
httpParams = httpParams.set('page', '0');
httpParams = httpParams.set('page', '1');
// httpParams.toString() -> 'page=1'
appned - 文档误导了我:将新值附加到参数的现有值。
所以我希望那个文档:
let httpParams = new HttpParams();
httpParams = httpParams.add('page', '0');
httpParams = httpParams.add('page', '1');
// httpParams.toString() -> 'page=1,2'
但实际 (angular 11.2.14) 行为是:
let httpParams = new HttpParams();
httpParams = httpParams.add('page', '0');
httpParams = httpParams.add('page', '1');
// httpParams.toString() -> 'page=1&page=2'
但我仍然需要有不同的变体:
page=0&size=10
- 可通过 httpParams
set
方法解决
sort=id,asc&sort=statusId,desc
- 可通过 httpParams
add
方法解决
search=id>100,id<500,statusId:3
- 需要手动解决
我将 Angular 4.2 与 Http 服务一起使用,并且我使用了像这样的 get 方法,其中 params 是一个 URLSearchParams对象:
this.http.get(url, {headers: this.setHeaders(), search: params})
我想迁移到 Angular5。 http 现在是 HttpClient 对象,就像 angular 团队推荐的那样。 'search' 键出错。
你知道如何将 Http 迁移到 HttpClient 服务吗?
谢谢。
Angular 4路:
this.http.get(url, {headers: this.setHeaders(), search: params})
Angular 5路:
import { HttpClient, HttpParams } from '@angular/common/http';
let params = new HttpParams().set('paramName', paramValue);
this.http.get(url, { params: params })
多个参数:
// Initialize Params Object
let Params = new HttpParams();
// Begin assigning parameters
Params = Params.append('firstParameter', firstVal);
Params = Params.append('secondParameter', secondVal);
从 Angular 4.3 开始,您可以像这样使用 HttpClient
:
import { HttpClient,HttpHeaders, HttpParams } from '@angular/common/http';
constructor(private httpClient: HttpClient) { }
getData(){
let headers = new HttpHeaders();
headers = headers.append('header-1', 'value-1');
headers = headers.append('header-2', 'value-2');
let params = new HttpParams();
params = params.append('param-1', 'value-1');
params = params.append('param-2', 'value-2');
this.httpClient.get("/data", {headers , params })
}
HttpParams
和 HttpHeaders
是不可变的 类 所以在每次调用 set
或 append
方法后它们 return 一个新的实例为什么你应该这样做:params = params.append(...)
以下是更改,您需要做的是:
将旧的 Http 导入替换为:
从“@angular/common/http”导入 { HttpClient };
创建 HttpClient 对象如下:
构造函数( 受保护的 httpClient: HttpClient, ){}
现在搜索参数的实现方式如下:
public get(searchParam: string): Observable { return this.httpClient.get(
${this.URL}/${searchParam}
); }
或:
public get(searchParam: string): Observable<object> {
let headers = new Headers({ 'Content-Type': 'application/json' });
let myParams = HttpParams().set("id", searchParam);
let options = new RequestOptions({ headers: headers, method: 'get', params: myParams });
return this.http.get("this.url",options)
.map((res: Response) => res.json())
.catch(this.handleError);
}
我遇到过需要将多个参数传递给 api 的情况。唯一对我有用的是在 HttpParams 对象初始化期间在链接在一起的同一行中调用 set() 方法时:
public get(userid: string, username: string): Observable<object> {
let headers = new Headers({ 'Content-Type': 'application/json' });
let myParams = HttpParams().set("id", userid).set("username", username);
let options = new RequestOptions({ headers: headers, method: 'get', params:
myParams });
HttpParams 有两个方法 set(string, string) & append(string, string)。
设置明确 - 文档:替换参数的值:
let httpParams = new HttpParams(); httpParams = httpParams.set('page', '0'); httpParams = httpParams.set('page', '1'); // httpParams.toString() -> 'page=1'
appned - 文档误导了我:将新值附加到参数的现有值。
所以我希望那个文档:
let httpParams = new HttpParams(); httpParams = httpParams.add('page', '0'); httpParams = httpParams.add('page', '1'); // httpParams.toString() -> 'page=1,2'
但实际 (angular 11.2.14) 行为是:
let httpParams = new HttpParams(); httpParams = httpParams.add('page', '0'); httpParams = httpParams.add('page', '1'); // httpParams.toString() -> 'page=1&page=2'
但我仍然需要有不同的变体:
page=0&size=10
- 可通过httpParams
set
方法解决sort=id,asc&sort=statusId,desc
- 可通过httpParams
add
方法解决search=id>100,id<500,statusId:3
- 需要手动解决