如何在aggrid中定位最近一次应用筛选条件的列
ag-grid serverSideDataSource 识别最近操作筛选列的实现方案
ag-grid 原生的getRows请求参数不会自带最近操作筛选列的标识,可通过自定义事件监听+追加请求参数的方式实现,具体步骤如下:
- 第一步:监听筛选变更事件,记录最近操作的列
通过ag-grid提供的filterModified事件,每次用户修改筛选条件时,将当前操作的列ID存储到变量中:
// 全局/组件内定义变量存储最近操作的筛选列ID let lastModifiedFilterCol = null; const gridOptions = { // 其余grid配置省略 onFilterModified: (event) => { lastModifiedFilterCol = event.column?.colId || null; } }
- 第二步:追加自定义参数到接口请求
在serverSideDataSource的getRows方法中,将存储的最近筛选列ID追加到请求参数中,再发送给后端:
const gridOptions = { // 其余grid配置省略 serverSideDatasource: { getRows: (params) => { // 构造请求参数,追加自定义字段 const requestPayload = { ...params.request, lastModifiedFilterColumn: lastModifiedFilterCol }; // 调用后端接口获取数据 fetch('/your-data-api', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(requestPayload) }).then(res => res.json()).then(result => { params.success({ rowData: result.rows, rowCount: result.totalCount }); }); } } }
- 可选方案:给筛选规则追加时间戳标记
如果不想额外新增顶层请求字段,可以在筛选变更时给对应列的筛选规则加时间戳字段,后端直接取filterModel中时间戳最大的项即可识别最新操作的列:
onFilterModified: (event) => { if (!event.column) return; const currentColId = event.column.colId; const allFilterModel = gridOptions.api.getFilterModel(); if (allFilterModel[currentColId]) { // 给当前修改的筛选规则追加时间戳标记 allFilterModel[currentColId].lastModifiedAt = Date.now(); gridOptions.api.setFilterModel(allFilterModel); } }
注意:如果用户触发清空所有筛选的操作,同步将存储的最近筛选列变量置空即可,避免传递无效的历史列标识。
内容的提问来源于stack exchange,提问作者Deepak Anuraag
相关产品推荐
相关产品推荐

