Как получить индекс строки в angular ui-grid 3.0

Я работаю с angular ui-grid версии 3.0 и не могу найти способ получить индекс строки, чтобы добавить столбец нумерации в сетку. Я хотел бы помочь себе.

5 ответов


нет способа легко получить индекс строки, поэтому это зависит от того, что вы пытаетесь сделать. Что вы ожидаете от нумерации, когда кто - то сортирует данные-вы хотите, чтобы номера оставались такими, как они были в исходных данных, или вы хотите, чтобы они изменились и выровнялись с новым порядком сортировки?

В FAQ http://ui-grid.info/docs/#/tutorial/499_FAQ находим:

вопрос здесь в том, чего вы действительно пытаетесь достичь. Вы хотите фактический индекс строки или что вы хотите отобразить последовательный идентификатор во всех своих строках?

Если последнее, то вы можете сделать это, просто добавив столбец "счетчик", чтобы ваши данные:

$scope.myData.forEach( function( row, index){
  row.sequence = index;
});

Если вы хотите показать индекс строки внутри внутренних элементов сетки, то это зависит от того, какой внутренний вы хотите. Вы можете получить индекс строки в сетке.строки, которые будут показывать строку, как она стоит в исходном списке строк( не фильтруется и не сортируется), или индекс строки внутри сетка.рендерконтейнеры.тело.visibleRowCache (фильтруется и сортируется) или индекс рендеринга строки в отображаемых строках (учитывая виртуализацию, это обычно особенно бесполезное число).

Если вы в порядке, что всякий раз, когда кто-то сортирует или фильтрует, то числа будут меняться, тогда вы можете сделать это с помощью cellTemplate, который будет чем-то вроде:

cellTemplate: '<div class="ui-grid-cell-contents">{{grid.renderContainers.body.visibleRowCache.indexOf(row)}}</div>'

cellTemplate: ' {{rowRenderIndex + 1}}'


используя этот способ для решения этой проблемы...

$http.get('./api/ioni_users')
        .success(function(data) {
            $scope.gridOptions.data = data;
            angular.forEach(data, function(data, index) {
                data["index"] = index+1;
                //data.push({"index":index+1})
            })
        });

следующее сработало для меня, поскольку мне нужно было увидеть индекс строки, поскольку он связан со всем набором данных, а не только с тем, что было видно пользователю. Его можно очистить, но это необработанный код, который я смог получить для работы с помощью формулы

((0/100)+((2*100)-100))+1 where 

0 = rowIndex (Zero Based)
100 = pagination page size
2 = current page
+1 = because the array is zero based


cellTemplate: '<div class="ui-grid-cell-contents">{{(((grid.renderContainers.body.visibleRowCache.indexOf(row) / grid.options.paginationPageSize)*100)+((grid.options.paginationPageSize * grid.options.paginationCurrentPage) - grid.options.paginationPageSize)) + 1}} </div>'

надеюсь, что это помогает.


проблема первого решения является то, что он не работает должным образом с разбиением на страницы. celltemplate столбца индекса должно быть что-то вроде этого, чтобы иметь правильный индекс на каждой странице и не начинать с 1 на каждой странице :

{ field: 'index', displayName: 'Index', width: '50', cellTemplate: '<div class="ui-grid-cell-contents">{{grid.renderContainers.body.visibleRowCache.indexOf(row)+(grid.options.paginationPageSize*(grid.options.paginationCurrentPage-1))+1}}</div>' }

это решение будет работать даже для клиентской разбиения на страницы или для серверной разбиения на страницы