AG Grid - 如果没有对其他列进行排序,则恢复默认排序

AG Grid - restore default sort if no other column is sorted

我的 ag-grid 有一个默认排序 this.options.defaultSortColumn,数据在初始化后按此排序。现在当用户按另一列排序然后再次删除排序时(通过单击 header 3 次),我想恢复默认排序并再次按默认列对数据进行排序。我尝试了以下方法:

postSort () {
  if (this.gridApi) {
    let currentSort = this.gridApi.getSortModel()
    console.log(currentSort)
    if (this.options.defaultSortColumn && currentSort && currentSort.length === 0) {
      // reset default sort, if no other sort is active
      this.gridApi.setSortModel({
        colId: this.options.defaultSortColumn,
        sort: (this.options.defaultSortDir || 'asc').toLowerCase()
      })
    }
  }
}

但这会导致 Maximum call stack size exceeded,我假设是因为它设置了排序,然后在更新 getSortModel() 之前再次运行 postSort 事件,所以它一直调用事件一遍又一遍。难道我做错了什么?还是有其他方法可以在没有其他列排序时恢复默认排序?

为了达到预期的结果,使用下面的 ag 网格事件 - onSortChanged 并检查当前排序的长度

  1. 加载时将默认排序分配给变量(比如 defaultSort)
  2. 使用onSortChanged网格API事件,检查currentsort长度

    onSortChanged: (e) => { console.log(e.api.getSortModel()) }

  3. 如果长度为0,设置默认排序使用this.gridApi.setSortModel(默认排序)

您还可以将 gridOptions 状态重置为初始化网格时的状态。

this.gridColumnApi.resetColumnState();

来自文档 -

resetColumnState() - Sets the state back to match the originally provided column definitions.

总结一下,因为存在一些混乱。 setSortModel 函数应该有一个数组作为参数而不是对象。

正确的方式(React例子)

  <AgGridReact onSortChanged={e => {
     if (!e.api.getSortModel().length) {
       e.api.setSortModel([
         {
          colId: 'columnId',
          sort: 'desc' // 'asc'
         }  
       ])
     }   
   }