Ag-Grid自定义过滤器doesFilterPass方法未触发问题排查求助
Ag-Grid自定义过滤器doesFilterPass未触发排查方案
1. 确认列定义绑定正确
检查使用该过滤器的列配置colDef中,已显式声明filter: 'tqFilter',名称和你注册到frameworkComponents的key完全一致,大小写不能出错。
2. 修复doesFilterPass返回值类型
Ag-Grid要求doesFilterPass必须返回布尔值,用来判断当前行是否通过过滤。你当前代码返回的是字段转大写后的字符串,类型不符合要求会导致Ag-Grid直接跳过该过滤器的执行,这是最可能的原因。
你需要补充匹配逻辑,示例修改如下:
doesFilterPass(params) { console.log('过滤器已触发'); // 如果你要匹配另一列的值,直接从行数据中取即可,不需要用当前列的valueGetter // 示例:判断另一列tqValue的值是否包含指定字符 const targetValue = params.node.data.tqValue.toString().toUpperCase(); return targetValue.includes('需要匹配的内容'); // 必须返回true/false }
3. 补充必填的过滤器生命周期方法
Ag-Grid自定义过滤器要求必须实现getModel和setModel两个方法,用来同步过滤器状态,缺少这两个方法也会导致过滤逻辑不触发,在组件中补充如下代码:
// 导出当前过滤器状态,供Ag-Grid缓存 getModel() { return { checked: this.state.checked }; } // Ag-Grid恢复过滤器状态时调用 setModel(model) { this.setState({ checked: model ? model.checked : false }); }
4. 检查行模型配置
如果你在gridOptions中配置了rowModelType: 'serverSide'/'infinite'等服务端行模型,前端的doesFilterPass不会触发,所有过滤逻辑需要移到后端实现。只有默认的客户端行模型clientSide才会执行前端过滤方法。
内容的提问来源于stack exchange,提问作者Mab
相关产品推荐
相关产品推荐

