You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ag-grid从16.0.1升级至25.1.0后如何实现旧版仅显示匹配过滤条件的树节点

ag-grid v20+ 对树数据过滤的默认逻辑做了调整:只要父节点匹配过滤条件,其下所有子节点都会默认展示,不再单独做过滤判断,你之前配置的filterValueGetter不生效是因为默认逻辑下分组列只会对组节点执行过滤值计算,叶子节点直接继承父节点的过滤结果。

方案1:使用官方内置配置(推荐,适配v25.x版本)

在gridOptions的autoGroupColumnDef和全局配置中增加如下参数即可恢复旧版过滤逻辑:

const gridOptions = {
  autoGroupColumnDef: {
    filter: 'agTextColumnFilter',
    floatingFilter: true,
    filterValueGetter: ({ data }) => data?.path ? data.path[data.path.length - 1] : '',
    filterParams: {
      // 设置树过滤策略为仅匹配当前节点,不继承父节点匹配结果
      treeFilterStrategy: 'matchNodeOnly'
    }
  },
  treeData: true,
  getDataPath: ({ path }) => path,
  // 全局关闭父节点匹配时自动包含子节点的逻辑
  groupIncludeChildren: false
}

方案2:自定义外部过滤(兼容性最强,不受版本默认逻辑影响)

如果内置配置不生效,可以用ag-grid的外部过滤能力完全自定义判断逻辑,100%符合业务需求:

const gridOptions = {
  autoGroupColumnDef: {
    filter: 'agTextColumnFilter',
    floatingFilter: true
  },
  treeData: true,
  getDataPath: ({ path }) => path,
  // 启用外部过滤
  isExternalFilterPresent: () => {
    const groupFilter = gridOptions.api.getFilterInstance('ag-Grid-AutoColumn');
    return !!groupFilter?.getModel();
  },
  // 自定义每个节点的过滤判断逻辑
  doesExternalFilterPass: (node) => {
    const groupFilter = gridOptions.api.getFilterInstance('ag-Grid-AutoColumn');
    const filterModel = groupFilter.getModel();
    // 无过滤条件时全部展示
    if (!filterModel) return true;
    const keyword = filterModel.filter.toLowerCase();
    // 仅用当前节点路径的最后一段做匹配判断
    const currentNodeName = node.data.path.at(-1).toLowerCase();
    return currentNodeName.includes(keyword);
  }
}

配置完成后调用gridOptions.api.onFilterChanged()触发过滤刷新即可。

内容的提问来源于stack exchange,提问作者Vladimir Kovarsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 03:45:03