我有一个带无限滚动和从IDatasource
检索数据的ag-grid。
我要做的是在过滤器模型发生变化时将其保存到会话存储中,然后在网格重新加载时加载并应用它,即当用户离开页面后又回来时。
我有一个onFilterChanged
事件处理程序,它可以
onFilterChanged(params) {
sessionStorage["myFilters"] = JSON.stringify(this.gridApi.getFilterModel());
}
我想要做的是
onGridReady(params) {
this.gridApi = params.api;
setTimeout(() => {
if(sessionStorage["myFilters"] !== undefined) {
const filters = JSON.parse(sessionStorage["myFilters"]);
this.gridApi.setFilterModel(filters);
}
this.gridApi.setDatasource(this.myDataSource);
}, 0);
}
然而,即使保存到会话存储中的JSON是正确的,当在我的IDatasource上调用getRows
时,它的filterModel参数的过滤器值也是空的:
这是否与以下事实有关:我的过滤器是一个集合过滤器,该集合的值是从另一个API端点动态加载的?
有没有办法做到这一点?
发布于 2021-04-27 22:50:07
我发现我的set filter中有一个错误,它没有正确实现setModel和getModel;解决方案是在调用setModel时将filter的值存储在filter组件本身中,并在调用getModel时对其进行检查:
getModel() {
return {
filter: this.items
.filter((item) => item.checked || item.name === this.selected)
.map((item) => item.name)
.join(),
};
}
setModel(model: any): void {
if (model && model.filter) {
this.selected = model.filter.name || model.filter;
}
}
这样,筛选器就能够将从sessionStorage检索到的值与现有项进行比较,并按预期工作。
https://stackoverflow.com/questions/67268249
复制相似问题