ag-grid - AG-Grid:如何使用具有无限行模型的自定义过滤器
问题描述
我正在使用 AG Grid Angular 并希望将自定义过滤器与无限行模型结合使用。
自定义过滤器的文档没有提到无限行模型,所以不清楚两者是否兼容。我已经实现了文档中的“简单过滤器”示例并将其附加到我的网格中,这是我观察到的:
- 自定义过滤器正确显示,单击单选按钮刷新网格。
- 但是,数据没有被修改,
doesFilterPass()
自定义过滤器的方法似乎也没有被调用(这在无限行模型中没有意义)。 - 我的行模型的数据源的
getRows()
方法被调用,但params.filterModel
仍然是空的。
在我看来,这几乎可以工作,除了自定义过滤器需要:
- 告诉网格添加数据源可以处理的过滤器模型
- 或直接告诉数据源应用过滤器(这似乎是可能的,因为过滤器可以通过 访问数据源
params.rowModel.datasource
,但这似乎是一个 hack)
有没有合适的方法来做到这一点,我错过了?
解决方案
如果您使用的是无限行模型,则网格希望您自己处理数据过滤并在getRows
回调中返回过滤后的行,如此处所述:https ://www.ag-grid.com/angular-grid/无限滚动/#sorting--过滤
请参阅以下示例,该示例向您展示如何使用自定义过滤器组件来过滤年龄列上的行:https ://plnkr.co/edit/riKeOvcWdUwWioVs
在回调内部getModel
,您只需返回一个值/对象,该值/对象将由网格传递,如下所示:request.filterModel
getRows
getModel(): any {
if (this.filterValue === 'all') {
return null;
} else {
return {
filter: this.filterValue,
type: 'equals',
};
}
}
然后在里面getRows
我写了一些基本的功能来过滤数据:
getRows: function (params) {
console.log(
'asking for ' + params.startRow + ' to ' + params.endRow
);
setTimeout(function () {
var dataAfterFiltering = filterData(data, params.filterModel);
var rowsThisPage = dataAfterFiltering.slice(
params.startRow,
params.endRow
);
var lastRow = -1;
if (dataAfterFiltering.length <= params.endRow) {
lastRow = dataAfterFiltering.length;
}
params.successCallback(rowsThisPage, lastRow);
}, 500);
},
推荐阅读
- typescript - 如何定义具有可选类型的自引用可扩展接口?
- amazon-web-services - 修改 Terraform 中的简单列表/数组
- android - Android 通知图标被绿色 android 图标取代,并且它不振动
- informix - 如何在informix 中创建具有BLOB 数据类型列的表?
- html - 如何在 CSS 中重新定位响应式导航
- asp.net-core - .NET MVC Core SendGrid 电子邮件验证不起作用
- maven - Maven-3.3.9 总是从远程而不是从本地拉依赖
- c# - email =null 和 VerifiedEmail=false 谷歌访问令牌
- php - 作曲家更新后Router.php中的错误
- java - 没有找到适合 ArrayList(List
)