AgGrid快速筛选能否基于格式化值搜索?是否有对应配置项?
回答
AgGrid目前没有内置的useValueFormatterForQuickFilter全局配置项,但可以通过两种批量处理方式实现需求,避免逐个列添加getQuickFilterText:
1. 批量处理列定义,自动复用valueFormatter
遍历原始列定义数组,为每个列自动添加getQuickFilterText逻辑,直接复用该列的valueFormatter(如果存在):
// 假设你的原始列定义是columnDefs const processedColumnDefs = columnDefs.map(colDef => ({ ...colDef, getQuickFilterText: (params) => { // 优先使用列的valueFormatter格式化后的值 if (colDef.valueFormatter) { return colDef.valueFormatter(params); } // 无格式化器时返回原始值 return params.value; } }));
将处理后的processedColumnDefs传入AgGrid的columnDefs配置即可。
2. 全局自定义快速筛选逻辑
在gridOptions中配置isQuickFilterPass,自定义整个快速筛选的判断逻辑,直接检查所有列格式化后的值是否匹配搜索词:
const gridOptions = { // 自定义快速筛选规则 isQuickFilterPass: (params) => { const searchText = params.quickFilterText.trim().toLowerCase(); if (!searchText) return true; // 空搜索时全部显示 // 遍历所有可见列,检查格式化后的值是否包含搜索词 return params.columnApi.getAllDisplayedColumns().some(column => { const colDef = column.getColDef(); const fieldValue = params.data[colDef.field]; let cellText; if (colDef.valueFormatter) { // 使用valueFormatter生成用于筛选的文本 cellText = colDef.valueFormatter({ value: fieldValue, data: params.data }).toLowerCase(); } else { cellText = String(fieldValue).toLowerCase(); } return cellText.includes(searchText); }); } };
这种方式更灵活,还能控制只针对可见列进行筛选,减少不必要的计算。
内容的提问来源于stack exchange,提问作者Mordechai Weinberg
相关产品推荐
相关产品推荐

