Angular URLSearchParams与HttpParams比较

问题描述 投票:0回答:1

以前是用

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方法中,它工作得非常完美。-> 因为当我们在传递params时。当它需要的时候才会传递给urlSearchParams。

目前我使用的是

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

而来到HttpParams。当我使用这个HTTPPARAMS时,每次每一个params都会通过api,如果它是null的话。

而对于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为null也会传递。

angular angular-httpclient angular-http angular9
1个回答
1
投票

你可以用辅助函数来实现

  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());
  }
© www.soinside.com 2019 - 2024. All rights reserved.