为啥 ag-grid 过滤器比较器没有执行?

Posted

技术标签:

【中文标题】为啥 ag-grid 过滤器比较器没有执行?【英文标题】:Why is the ag-grid filter comparator not executing?为什么 ag-grid 过滤器比较器没有执行? 【发布时间】:2021-09-05 10:04:34 【问题描述】:

我目前使用的是 Angular 10.2 版和 ag-grid 25.3.0 版

遵循 ag-grid here 的日期列自定义过滤器文档后,我决定将其应用于数字列并稍作修改。基本上,如果用户过滤一个小于 0 的数字,它应该将过滤器和单元格值乘以 100 并进行比较。如果不是,则正常比较这些值。我的具体列定义如下:


  field: 'roi',
  headerName: 'ROI',
  valueGetter: this.calculateROI.bind(this),
  filter: 'agNumberColumnFilter',
  filterParams: 
    comparator: function(filterValue: number, cellValue: number) 
      console.log(filterValue);
      if (filterValue < 0) 
        filterValue *= 100;
        cellValue *= 100;
      

      if (cellValue < filterValue) return -1;
      if (cellValue === filterValue) return 0;
      return 1;
    
  ,
  valueFormatter: this.percentFormat.bind(this),
  cellClassRules: 
    'cell-failure': (params: ValueFormatterParams) => params.value < 0,
    'cell-success': (params: ValueFormatterParams) => params.value > 0,
    'cell-even': (params: ValueFormatterParams) => params.value === 0,
  
,

默认列定义还具有可排序、过滤和调整大小的所有设置为true

我的问题是比较器功能甚至没有触发。控制台中没有控制台日志,即使它是比较器函数的第一行。我在 *** 上检查了 ag-grid 的 GitHub 问题和其他问题,但没有成功。

存在一些 *** 问题,但这些问题与列值比较器有关,而不是 filterParams 中的比较器。任何帮助,将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

如果您想使用 agNumberComparator,您可以查看以下文档。 比较器不是此处的 filterparams 属性。我认为您的比较器功能不会因此而被触发。 https://www.ag-grid.com/angular-grid/filter-number/#custom-number-support

【讨论】:

为了以问题中描述的方式过滤数字,您是否建议我使用实现自定义过滤器接口的自定义组件?我真的很想保持过滤器的外观和感觉与 ag-grid 默认过滤器相同

以上是关于为啥 ag-grid 过滤器比较器没有执行?的主要内容,如果未能解决你的问题,请参考以下文章

未触发 ag-grid 比较器功能

如何比较ag-grid中的行

为啥没有使用 vuejs 将新行添加到 ag-grid?

为啥 SQL Server 执行计划取决于比较顺序

Ag-grid 隐藏过滤列

过滤器下的按钮未出现在 Ag-Grid 中