Угловой UI-Grid: как получить количество общих элементов после фильтрации
Я использую UI Grid для отображения некоторых данных. Один из столбцов-текст, поэтому у меня есть "содержит" фильтрацию, которая работает отлично.
Я также использую разбиение на страницы. В правом углу UI-сетки отображается что-то вроде:
1 - 23 of 23 items
в моей функциональности страницы (угловая сторона контроллера) мне нужно вернуть количество общих элементов, в частности, последний "23" из этой строки. Я не мог найти ничего в документации, кроме этого (с docs):
GridOptions (api в модуле ui.сетка.pagination)
totalItems Общее количество деталей, установленное автоматически когда пагинация стороны клиента, потребности установить Пользователем для разбиения на страницы на стороне сервера"
поэтому я попытался с помощью $scope.gridOptions.totalItems
но, к сожалению, он всегда возвращает 0 при первой загрузке страницы.
мой обходной путь использовал данные.длина, которая даст мне то, что мне нужно. После дальнейшего тестирования, хотя я понял, что после вас используйте фильтрацию, общее количество элементов в нижнем колонтитуле страницы изменяется на сумму результатов сопоставления. Я не нашел другого способа получить этот номер.
еще одна вещь:
Есть ли событие, которое срабатывает после завершения фильтрации, чтобы я мог проверить $scope.gridOptions.totalItems
потом?
какие идеи? Заранее спасибо:)
4 ответов
вы должны избегать jQuery (как предлагает другой пост) и взаимодействовать с API вместо этого.
сначала вам нужно сохранить ссылку на API в событии создания сеток.
$scope.gridOptions = {
....
onRegisterApi: registerGridApi,
....
};
function registerGridApi(gridApi) {
$scope.gridApi = gridApi;
}
вы уже должны знать общее количество строк.
вы можете получить количество видимых/отфильтрованные строки:
gridApi.core.getVisibleRows().length
или
gridApi.grid.getVisibleRows().length
вы можете получить количество выбранных строк:
gridApi.selection.getSelectedRows().length
Вы можете использовать этот способ.
var RowsVisible = $(".ui-grid-row").length;
если группировка есть, используйте это
var RowsVisible = $(".ui-grid-row").length/2;
это даст вам, сколько строк присутствует. Если группировка есть, то она даст вам количество заголовков и видимых строк.
getVisibleRows () вернет количество видимых строк. Если вы развернете группировку, размер getVisibleRows () соответственно увеличится.
$scope.gridApi.core.getVisibleRows().length;
поэтому выше подход имеет ряд ограничения.
вы также можете получить общие сгруппированные строки, используя следующий подход.
var totalGroupedRows = Object.keys($scope.gridApi.grid.grouping.groupingHeaderCache).length ;
Примечание
$scope.gridOptions = {
....
onRegisterApi: registerGridApi,
....
};
function registerGridApi(gridApi) {
$scope.gridApi = gridApi;
}
получите ваши общие элементы:
var totalItems = $scope.gridApi.grid.options.totalItems;