Ag grid 跨页面重新加载保存ag网格过滤器模型

Ag grid 跨页面重新加载保存ag网格过滤器模型,ag-grid,infinite-scroll,ag-grid-angular,Ag Grid,Infinite Scroll,Ag Grid Angular,我有一个带有无限滚动条的ag网格和从IDatasource检索的数据 我试图做的是在过滤器模型更改时将其保存到会话存储中,然后在网格重新加载时加载并应用它,即当用户离开页面然后返回时 我有一个onFilterChanged事件处理程序 onFilterChanged(params) { sessionStorage["myFilters"] = JSON.stringify(this.gridApi.getFilterModel()); } 我想做的是 onGrid

我有一个带有无限滚动条的ag网格和从
IDatasource
检索的数据

我试图做的是在过滤器模型更改时将其保存到会话存储中,然后在网格重新加载时加载并应用它,即当用户离开页面然后返回时

我有一个
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正确,当在my IDatasource上调用
getRows
时,其filterModel参数的筛选器值为空:

这是否与我的过滤器是一个集合过滤器以及集合的值是从另一个API端点动态加载的事实有关


有办法做到这一点吗?

结果表明,我的集合过滤器中有一个bug,它没有正确实现setModel和getModel;解决方案是在调用setModel时将筛选器的值存储在筛选器组件本身中,并在调用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检索到的值与现有项进行比较,并且它可以按预期工作