Angular URLSearchParams против HttpParams - PullRequest
0 голосов
/ 01 мая 2020

Ранее я использую с

import { Http, Response, Headers, URLSearchParams  } from "@angular/http";

И для вызова API

getprojectscount(city, param){
let urlSearchParams = new URLSearchParams();
  urlSearchParams.set('limit', param.limit );
  urlSearchParams.set('limitrows', param.limitrows );
  urlSearchParams.set('locality', param.locality );

return this.http
    .get(this.myapiurl + city + "?", { search: urlSearchParams })
    .pipe(map(response => response.json().Counts));

}

В этом методе URLSEARCHPARAMS он работает отлично. -> Потому что когда мы передаем парам. Когда это потребуется, только в это время он будет передан в urlSearchParams.

В настоящее время использую с

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

И приходит к HttpParams. Когда я использую этот HTTPPARAMS, Каждый раз, когда каждый параметр проходит через API, Если он также является нулевым.

И для вызова API

getprojectcount(city,param){
let params = new HttpParams();
params = params.append('limit', param.limit);
 params = params.append('limitrows', param.limitrows);
 params = params.append('locality', param.locality);
 return this.httpClient.get(this.myapiurl + city + "?", {params: params} ).pipe(retry(3), catchError(this.handleError));
}

Любое решение для этого. Потому что из этого httpparams. Если params равен нулю, он также проходит.

1 Ответ

1 голос
/ 01 мая 2020

вы можете достичь этого с помощью вспомогательной функции

  getprojectcount(param){
    return this.http.get(url, {params: toHttpParams(param)});
  }

  export function toHttpParams(obj: Object): HttpParams {
    return Object.getOwnPropertyNames(obj)
      .filter((key) => obj[key] !== undefined && obj[key] !== null )
      .reduce((p, key) => p.set(key, obj[key]), new HttpParams());
  }
...