javascript - httpParams 删除未定义的参数

标签 javascript angular typescript

我需要在我的 URL 中发送参数以从服务器获取过滤后的数据。

我是这样设置参数的

const queryParams = new HttpParams(
      {
        fromObject: {
          page: this.paginator.pageIndex.toString(),
          pageSize: this.paginator.pageSize.toString(),
          search: this.searchKey,
          sortBy: this.selectedFilterByStatusValue,
          sortByType: this.selectedFilterSortByValue
        }
      });

在我的服务中

 getData(params: HttpParams) {
    return this.apiService.get<IResponseList<IData>>(`${this.url}/list`, params);
  }

问题是,当某些过滤器未被选择时,因为我不需要它们,并且它被设置为未定义,但这是不正确的......我需要删除未定义的参数。

这是queryParamsconsole.log

cloneFrom: null
encoder: HttpUrlEncodingCodec {}
map: Map(5)
  [[Entries]]
  0: {"page" => Array(1)}
  1: {"pageSize" => Array(1)}
      key: "pageSize"
      value: ["3"]
  2: {"search" => Array(1)}
  3: {"sortBy" => Array(1)}
  4: {"sortByType" => Array(1)}

我尝试使用 .set("page", this.paginator.pageIndex).append(...) 但我总是得到相同的结构

此外,我尝试直接在服务中修复此问题,但这不起作用,我再次得到 undefined

this.httpClient.get(`${this.url}/list`, { 
  params: Object.entries(queryParameterObject).reduce((queryParams, [key, value]) => queryParams.set(key, value), new HttpParams());
});

感谢

最佳答案

这是我认为可能适合您的单行代码:


const newQueryParameterObject = Object.entries(queryParameterObject).reduce(
    (acc, [key, value]) => ({ ...acc, ...((value != null) & { [key]: value }) }),
    {}
);

this.httpClient.get(`${this.url}/list`, { params: new HttpParams({fromObject:newQueryParameterObject}) });

它将清除具有空值或未定义值的变量。

关于javascript - httpParams 删除未定义的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62169157/

相关文章:

javascript - Angular 2 : array. splice() 正在从 DOM 中删除元素

angular - 在 Angular 4 的 Reactive 表单内的单选按钮组中有条件地禁用单选按钮

php - 仅在提交时使用 javascript 保存表单状态

javascript - 如何从 slickgrid 中的代码提交单元格中的更改

Angular 7,命名路由器 socket 在延迟加载的模块中不起作用

typescript - 在 .net 核心项目中获取 DefinitelyTyped typescript 定义文件的 "right"方法是什么?

reactjs - 引用错误 : Can't find variable React

angular - 在 Angular Reactive Forms 中的 FormGroup 实例上设置错误无法按预期工作

javascript - 每次插入数据库时​​自动递增 `trackingcode` 列

javascript - AngularJS 数据与 select 标签绑定(bind)