Угловой 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;