Как передать 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 });