AGGrid设置数字过滤器却自动转为文本过滤器问题求助
问题
使用ag-grid-community 33.0.3和ag-grid-angular 33.0.3版本,通过API设置列过滤器的代码如下:
applyNumberFilter(operation: OperationsFormValue) { const filterModel = this.params.api.getFilterModel(); const gridFilter: NumberFilterModel = { filterType: "number", type: operation.operator, filter: operation.value1, filterTo: operation.value2, }; filterModel[this.colId] = gridFilter; console.log("Set", filterModel); this.params.api.setFilterModel({ ...filterModel }); console.log("Get", this.params.api.getFilterModel()); }
控制台输出显示设置的是数字过滤器,但获取时却变为文本过滤器:
Set {"time_duration":{"filterType":"number","type":"equals","filter":55,"filterTo":null}} Get {"time_duration":{"filterType":"text","type":"equals","filter":"55"}}
当前defaultColDef中配置了cellDataType: false,请问为何会出现这种转换?
分析与解决
原因
当配置cellDataType: false时,AG Grid会禁用自动数据类型检测机制。此时列未被明确标记为数字类型,Grid会默认使用文本过滤器处理该列。即便通过API手动设置数字过滤器模型,Grid在校验和同步过滤器状态时,会因为列类型不明确,自动将过滤器转换为文本类型,同时把数值转为字符串格式。
解决方法
方法一:为目标列指定明确的数据类型
可以针对time_duration列单独配置cellDataType: 'number',让Grid识别该列的数值属性,确保数字过滤器模型能被正确保留:
const columnDefs = [ { field: 'time_duration', cellDataType: 'number', // 其他列配置项 }, // 其他列定义... ];
如果大部分列都是数字类型,也可以直接在defaultColDef中设置cellDataType: 'number'替代false。
方法二:移除全局禁用自动类型检测的配置
删除defaultColDef中的cellDataType: false,AG Grid会自动根据列数据的实际类型进行推断,此时通过API设置的数字过滤器就能正常生效,不会被转换为文本类型。
验证
修改配置后重新执行applyNumberFilter方法,再次调用getFilterModel()时,返回的过滤器模型应保持filterType: "number",且filter值为数字类型(如55而非"55")。
内容的提问来源于stack exchange,提问作者Dale
相关产品推荐
相关产品推荐

