AG Grid React:如何让Status列聚合函数返回叶子节点总数?
AG Grid React 实现分组行统计所有叶子节点数量
你当前使用的aggFunc: (params) => params.value.length只会统计当前分组的直接子节点数量(也就是你看到的4),而AG Grid行分组括号内的计数是自动遍历所有层级的叶子节点得出的20。要让Status列实现同样的统计逻辑,需要修改聚合函数,让它遍历当前分组下的所有叶子节点:
方案一:使用AG Grid内置API(推荐,适配新版AG Grid)
新版AG Grid提供了getLeafNodesUnderGroup方法,可以直接获取分组下的所有叶子节点,统计总数即可:
const statusColumnConfig = { headerName: 'Status', field: 'status', aggFunc: (params) => { // 获取当前分组对应的节点 const groupNode = params.node; // 获取该分组下所有叶子节点 const allLeafNodes = params.api.getLeafNodesUnderGroup(groupNode); // 返回叶子节点总数 return allLeafNodes.length; }, // 其他列配置项 };
方案二:递归遍历子节点(兼容旧版AG Grid)
如果你的AG Grid版本没有getLeafNodesUnderGroup方法,可以手动递归遍历分组的所有子节点,统计叶子节点数量:
// 递归统计叶子节点的工具函数 const calculateLeafCount = (node) => { if (node.leaf) { return 1; } let total = 0; node.children.forEach(child => { total += calculateLeafCount(child); }); return total; }; const statusColumnConfig = { headerName: 'Status', field: 'status', aggFunc: (params) => { return calculateLeafCount(params.node); }, // 其他列配置项 };
额外说明
- 无论分组是否展开,以上两种方法都会统计该分组下所有层级的叶子节点总数,和行分组括号内的计数逻辑一致。
- 如果需要统计叶子节点中满足特定条件的数量(比如某类Status的个数),只需修改工具函数,在判断叶子节点时加入条件判断即可。
内容的提问来源于stack exchange,提问作者Dhanishtha
相关产品推荐
相关产品推荐

