Вот потенциальный обходной путь ...
1. В Ui-grid.js снимите часы, установленные для каждого фильтра столбца в заголовке. Посмотрите, удаляет ли это медлительность. Он также заставит сетку не реагировать на изменения фильтра. Перейдите к шагам 2-4, чтобы фильтры снова работали.
//$scope.col.filters.forEach(function (filter, i) {
//filterDeregisters.push($scope.$watch('col.filters[' + i + '].term', function(n, o) {
// if (n !== o) {
// uiGridCtrl.grid.api.core.raise.filterChanged();
// uiGridCtrl.grid.api.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);
// uiGridCtrl.grid.queueGridRefresh();
// }
//}));
//});
2. В своем коде, создать функцию, которая перебирает через фильтр с точки зрения каждого столбца и создает строку всех условий фильтра.
function getConcatenatedFilter() {
var concatenatedFilter = "";
var api = this.getGridApi();
if (api) {
for (var i = 0; i < api.grid.columns.length; i++) {
concatenatedFilter += i + ":";
var column = api.grid.columns[i];
var term = column.filters[0].term || "";
if (term) {
concatenatedFilter += term;
}
}
}
return concatenatedFilter;
}
3. Создать один часы, которые контролируют функцию каскадного фильтра выше. Когда он срабатывает, создайте тайм-аут, который устанавливает другую переменную области, называемую filtersCheck
. Тайм-аут будет ждать 200 мс до изменения filtersCheck
.
$scope.$watch(function() {return getConcatenatedFilter();},
function (newVal: string, oldVal: string) {
if (filterTextTimeout) {
$timeout.cancel(filterTextTimeout);
}
var tempFiltersString = newVal;
filterTextTimeout = $timeout(() => {
$scope.filtersCheck = tempFiltersString;
}, 200);
});
4. Наконец, установить окончательные часы для filtersCheck
, который будет обновить сетку, когда он стреляет.
$scope.$watch('filtersCheck', (newVal, oldVal) => {
if (newVal && oldVal && newVal !== oldVal) {
gridApi.grid.queueGridRefresh();
}
});
Трудно определить, не видя ваш код. –