17

我有一个Ionic/Angular使用ag-grid. 我希望某些网格在加载网格时自动应用过滤器 - 无需用户执行任何操作。

我尝试了以下方法:

onGridReady(params) {
  params.api.sizeColumnsToFit();
  // get filter instance
  var filterComponent = params.api.getFilterInstance("isActive");
  // OR set filter model and update
  filterComponent.setModel({
    type: "greaterThan",
    filter: 0
  });
  filterComponent.onFilterChanged();
}

但它什么也没做。有任何想法吗?

4

5 回答 5

13

编辑: AgGrid 在 24.0 版中包含一个 onFirstDataRendered 回调,如后面的评论中所述。下面的原始答案现在仅与此功能之前的版本相关。

onFirstDataRendered(params) {
    var filterComponent = params.api.getFilterInstance("isActive");

    filterComponent.setModel({
        type: "greaterThan",
        filter: 0
    });

    filterComponent.onFilterChanged();
}

在他们的几个旧的 plunk示例中重现了您的问题,似乎通过添加一个小延迟来缓解。只是冒险猜测可能 DOM 还没有完全准备好,尽管网格已经准备好了。

Pre-onFirstDataRendered 版本:

onGridReady(params) {
params.api.sizeColumnsToFit();

setTimeout(() => {
    var filterComponent = params.api.getFilterInstance("isActive");
    filterComponent.setModel({
      type: "greaterThan",
      filter: 0
    });
    filterComponent.onFilterChanged();
    },150)
}
于 2018-03-23T13:14:21.393 回答
6

我最终这样做了。

var FilterComponent = gridOptions.api.getFilterInstance('Status');
FilterComponent.selectNothing(); //Cleared all options
FilterComponent.selectValue('Approved')  //added the option i wanted
FilterComponent.onFilterChanged();   
于 2018-06-08T16:49:01.030 回答
5

我认为问题在于,加载新行时网格会重置过滤器。有多种方法可以解决这个问题:

  1. 预定义的过滤器类型有一个过滤器参数,称为newRowsAction
    https://www.ag-grid.com/javascript-grid-filter-text/#params

    newRowsAction:加载新行时要做什么。默认是重置过滤器。如果要在行加载之间保持过滤器状态,则将此值设置为“保持”。

  2. 这个答案建议设置gridOptions属性deltaRowDataMode=true

  3. 您还可以收听网格日期更改时发出的网格事件之一,然后应用过滤器 https://www.ag-grid.com/javascript-grid-events/#miscellaneousrowDataChanged, rowDataUpdated

当数据更改时,这些都应该保留过滤器,但我认为如果您只希望在第一次加载时过滤器,您仍然需要一些额外的逻辑(设置标志)。

于 2018-04-24T09:10:10.680 回答
1

在我的情况下,我需要在加载网格时恢复 Ag-Grid 的设置过滤器。受公认答案的启发,我的理解是过滤器实例 api 只能在网格数据准备好(不是 gridReady)后访问,因为它需要聚合行数据以填充其过滤器列表。

因此,正如@Fabian 的回答中建议的#3,我已经在行数据更改时设置了事件侦听器。

您还可以收听网格日期更改时发出的网格事件之一,然后应用过滤器https://www.ag-grid.com/javascript-grid-events/#miscellaneousrowDataChanged, rowDataUpdated

在类似的用例中,我认为这是一种比在访问过滤器实例之前设置任意超时数更好的方法,因为它最终可能会导致结果不一致。

于 2020-06-19T04:39:15.240 回答
1

v24.0.0

实现这一点的最佳方法是在firstDataRendered回调中应用您的默认过滤器。

例如

onFirstDataRendered(params) {
   //... apply your default filter here
}
于 2020-10-07T14:57:37.497 回答