Как передать URLSearchParams в методе "get" HttpClient - Угловой 5
Я использовал Angular 4.2 с Http- сервисом, и я использовал метод get, подобный этому, где params - объект URLSearchParams:
this.http.get(url, {headers: this.setHeaders(), search: params})
Я хочу перейти на Angular 5. http теперь является объектом HttpClient, рекомендованным угловой командой. Я получил ошибку с ключом поиска.
Вы знаете, как перенести Http на HttpClient-сервис в моем случае?
Спасибо.
Ответы
Ответ 1
Поскольку 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
они возвращают новый экземпляр, поэтому вы должны это сделать: params = params.append(...)
Ответ 2
Угловой 4-й путь:
this.http.get(url, {headers: this.setHeaders(), search: params})
Угловой 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);
Ответ 3
Ниже перечислены изменения, которые вам нужно сделать:
-
Замените импорт старых Http с помощью:
import {HttpClient} из "@angle/common/http";
-
Создайте объект 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);
}
Ответ 4
У меня была ситуация, когда было несколько параметров, которые нужно было передать в api. Единственное, что сработало для меня, - это вызов метода set() в той же строке, спрятанной вместе во время инициализации объекта HttpParams:
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 });