Я бы сказал, что это была непростая задача.
Но вот как это можно решить:
- Как вы уже упоминали,
quickFilter
- это clientSide
функция типа модели
- Но никто не отменял
setFilterModel
способ использования # P3 #
Во-первых, 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"
}
},
Затем нам нужно создать обходной путь для 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) ...
}
Теперь о quickFilter
логике, мы определили для нее dummy
столбец и вот как его следует использовать:
setFilterModel примет только существующее имя столбца ("-" в нашем случае)
и с ограниченными свойствами объекта: но мы будем использовать filter
(как в реальных случаях)
applyFilter(){
this.gridApi.setFilterModel({"-":{filter: this.filterText}})
}
и последняя точка реализации - 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;
}
Каждый объект будет исследован, и если какое-либо свойство содержит quickFilter
значение - оно будет в результате
Более того, как только вы выйдете за пределы существующего диапазона (случай бесконечной прокрутки), запрошенные данные будут отфильтрованы этим свойством.
* не уверен в проверке дублированных данных по запросу
Мой образец
Ваш измененный образец
person
un.spike
schedule
01.12.2018