用于过滤整个字符串数组的 Ag-grid 文本过滤器

Posted

技术标签:

【中文标题】用于过滤整个字符串数组的 Ag-grid 文本过滤器【英文标题】:Ag-grid text filter for filtering across an entire array of strings 【发布时间】:2019-04-30 01:33:06 【问题描述】: 我正在使用带有多个选项的 Angular 材质选择。 每次选择或取消选择一个选项时,我都会调用一个选项 过滤表中的数据并仅显示那些 已选中。

这是 mat-select 的代码。

<mat-form-field>
<mat-select placeholder="RequestID" id = "filter-check-box" multiple>
    <mat-option (onSelectionChange) = "RequestIDCheckboxFilter($event, RequestID)" 
 *ngFor="let RequestID of RequestIDArray" [value]="RequestID">RequestID</mat-option>
</mat-select>

这是 RequestIDArray 的定义:RequestIDArray: string[] = ['REQ001', 'REQ002', 'REQ003', 'REQ004'];

这就是RequestIDCheckboxFilter函数的定义。 ReqIDFilter 是我存储当前检查的值的数组。 :

RequestIDCheckboxFilter(event, text: string) 
  var CheckboxFilterComponent = this.gridApi.getFilterInstance("requestID");
  if(event.isUserInput) 
    var index = this.ReqIDFilter.indexOf(text);
    if(index == -1) 
      this.ReqIDFilter.push(text);
     
    else 
      this.ReqIDFilter.splice(index, 1);
    
  

  for(var i = 0; i < this.ReqIDFilter.length; i++) 
    CheckboxFilterComponent.setModel(
      type: "equals",
      filter: this.ReqIDFilter[i]
    )
  

  this.gridApi.onFilterChanged();

执行此操作时,即使选择了多个选项,我也只能看到其中一行。比如说,如果选择了 REQ001 和 REQ002,则只有 REQ001 所在的行可见。我也尝试在 setModel 中使用 for 循环,但这会出错。有什么方法可以过滤表格中的所有值吗?

编辑:我使用的是社区版的 ag-grid。

【问题讨论】:

您使用的是社区版还是企业版的 ag-grid? 社区版。我会在我的问题中更新它。 【参考方案1】:

我认为text filter 无法做到这一点。 在您的循环中,每次迭代都会覆盖过滤器模型。

另见ag-grid gridApi.setFilterModel() model with multiple conditions [angular6]

企业版有一个名为 Set Filter 的东西,可以满足您的需求。

所以我看到了以下选项

买企业版(挺贵的) 尝试创建自定义过滤器 过滤网格的数据源,而不是直接过滤网格。

编辑:如果设置的过滤器是满足您需求的正确工具,那么您可以测试企业版的试用版。

也许Does ag-grid have an api to filter multiple checkbox values? 有帮助?

【讨论】:

以上是关于用于过滤整个字符串数组的 Ag-grid 文本过滤器的主要内容,如果未能解决你的问题,请参考以下文章

在一列上设置过滤器和提供的过滤器 - Ag-Grid

如何在使用“inRange”过滤器类型的 ag-grid 中创建自定义浮动过滤器组件

在 ag-grid 浮动过滤器中键入多个值

需要在 AG-Grid 过滤器中使用空格分隔值来返回每个匹配项

字典数组和字符串的过滤器数组

Ag-grid 隐藏过滤列