【发布时间】:2019-12-03 18:37:50
【问题描述】:
我的 ag-grid 有一个默认排序 this.options.defaultSortColumn,一旦初始化,数据就会按此排序。现在,当用户按另一列排序然后再次删除排序(通过单击标题 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 事件,所以它只是一遍又一遍地调用事件。难道我做错了什么?或者当没有其他列排序时,是否有其他方法可以恢复默认排序?
【问题讨论】:
-
你在哪里使用这个 postSort 方法?在每一列上??
-
@NagaSaiA 不,我在网格本身的 gridOptions 中有它,所以
<ag-grid-vue :postSort="postSort"> -
on 选项是在加载到变量时设置默认排序模型(比如 defaultSort)并使用 onSortChanged 网格 API 事件并检查 currentSort.length 并使用 this.gridApi.setSortModel(defaultSort) 设置默认排序而不是使用 postSort
-
onSortChanged: (e) => { console.log(e.api.getSortModel()) }
-
发布 cmets 作为步骤的答案,问题在于每行多次调用的 postSort
标签: javascript sorting vue.js ag-grid