我的网格中的列上有一个自定义过滤器组件。我注意到在单击列标题中的过滤器图标之前,不会构建过滤器组件。这意味着数据不会根据我的默认设置进行过滤(例如,过滤掉 where 的记录status == StatusEnum.Complete
)。
作为一种解决方法,我发现我可以onGridReady
通过调用在事件中获取一个过滤器实例api.getFilterInstance('status')
,这会导致创建过滤器组件,从而应用默认过滤。
这种解决方法似乎有点笨拙。该filter
变量在事件中未使用onGridReady
,这会导致 IDE / build 中出现警告。另一个开发人员可能会过来删除这行代码,认为这是不必要的。
是否有更好的方法可以在创建网格时强制实例化我的自定义过滤器?我正在使用 AgGrid 17.1 和 Angular 4.4。
网格配置如下:
gridOptions: GridOptions = {
enableFilter: true,
onGridReady: (event) => {
let filter = event.api.getFilterInstance("status"); // forces the filter component to be constructed
let data = this.loadAsyncData();
event.api.setRowData(data);
},
columnDefs: [
...
{
headerName: "Status",
field: "status",
filterFramework: MyCustomStatusFilterComponent,
filterParams: {
valueGetter: (obj) => { return obj.data.statusEnum; },
hideCompleteByDefault: true,
...
}
},
....
]
}
我已经设置了一个示例来演示该问题。注意第 63 行的“hack” app.component.ts
。