Par*_*osh 5 ag-grid ag-grid-angular
根据文档:快速过滤器,快速过滤器适用于clientSide行模型。
我们正在为ag-gridserverSide使用行模型,并且我们需要对客户端(网格的缓存块中)的数据使用快速过滤器。
我虽然使用过滤器管道[rowData]="myRowData",但对于这个行模型,我没有从 中获取任何数据myRowData。
例如,如果您查看这个 plunk服务器端行模型 - 快速过滤器,我已
[rowData]="rowData"在标记中进行分配并将其初始化为[]。从服务器加载初始块后,我假设应该可以使用它访问缓存块数据,以便使用角度管道,我将能够在客户端过滤掉数据(模仿行模型的快速过滤器
serverSide)。就像我们以前在angularjs[rowData]="rowData | filter: filterText"中所做的那样
但我担心缓存数据无法通过rowData.
我们如何以某种方式将快速过滤器与具有serverSide行模型的 ag-grid 一起使用?
我想说这不是一件容易的事。
但解决方法如下:
quickFilter这是一个clientSide模型类型功能setFilterModel使用方式
这需要大量的修改,并且可能会破坏某些东西(你必须在你的解决方案中检查它并然后写反馈)
首先,setFilterModel不能使用虚拟数据(我们必须专门column为quickFilter逻辑定义)
{
field:'-', would be used as a reference
hide:true, - hide in grid data
lockVisible:true, - disable visibility changing via menu
filter:"agTextColumnFilter", - require for setFilterModel
filterParams:{
newRowsAction: "keep"
}
},
Run Code Online (Sandbox Code Playgroud)
接下来,我们需要创建一个解决filterModel方法datasource
getRows: function(params) {
setTimeout(function() {
var dataAfterSortingAndFiltering = sortAndFilter(data, params.sortModel, params.filterModel);
var rowsThisPage = dataAfterSortingAndFiltering.slice(params.startRow, params.endRow);
var lastRow = -1;
if (dataAfterSortingAndFiltering.length <= params.endRow) {
lastRow = dataAfterSortingAndFiltering.length;
}
params.successCallback(rowsThisPage, lastRow);
}, 3000);
}
function sortAndFilter(allOfTheData, sortModel, filterModel) {
return sortData(sortModel, filterData(filterModel, allOfTheData));
}
function sortData(sortModel, data) {
... sort logic here (doesn't matter for now) ...
}
Run Code Online (Sandbox Code Playgroud)
现在关于quickFilter逻辑,我们已经dummy为其定义了列,以及如何使用它:
setFilterModel 将仅接受现有的列名称(在我们的例子中为“-”)
并使用有限的对象道具:但我们将使用filter(如在实际情况中使用的那样)
applyFilter(){
this.gridApi.setFilterModel({"-":{filter: this.filterText}})
}
Run Code Online (Sandbox Code Playgroud)
最后一个实现点是filterData函数
function filterData(filterModel, data) {
let filterPresent = filterModel && Object.keys(filterModel).length > 0;
if (!filterPresent) { - if filter model is empty - skip it
return data;
}
data = data.filter(i=>{
if(Object.keys(i).some(k => i[k] && i[k].toString().toLowerCase().includes(filterModel['-'].filter)))
return i;
})
return data;
}
Run Code Online (Sandbox Code Playgroud)
将探索每个对象,如果任何属性包含quickFilter值 - 它将出现在结果中
此外,一旦滚动超出现有范围(无限滚动情况),请求的数据将被此属性过滤
*不确定是否应要求检查重复数据
我的sample
你修改过的sample
| 归档时间: |
|
| 查看次数: |
6552 次 |
| 最近记录: |