Как лучше всего подсчитать итоги столбцов в ng-grid?

Если у меня есть столбцы (имя, количество), как мне лучше всего создать строку/нижний колонтитул, который показывает («Всего», 8877)? Ясно, что вы можете сделать это, добавив строку к данным, но это разрушит возможность сортировки. Кажется, относительно легко сгруппировать по имени и показать сумму для каждого имени, но я не нашел, как сделать более простой случай (хотя я обнаружил, что другие спрашивают - https://github.com/angular-ui/ng-grid/issues/679 например)


person baldmark    schedule 30.09.2013    source источник
comment
почему вы не принимаете решение?   -  person Sampath    schedule 14.08.2016


Ответы (4)


Вы можете включить собственный шаблон нижнего колонтитула в gridOptions. Я искал форматирование нижнего колонтитула по умолчанию в исходном коде и скопировал его, но добавил функцию, которая вычисляет итоги. Что-то вроде этого:

$scope.gridOptions = {
data: 'hereGoesTheData',
columnDefs : [list of your column names],
showFooter: true,
footerTemplate: 
'<div ng-show="showFooter" class="ngFooterPanel" ng-class="{\'ui-widget-content\': jqueryUITheme, \'ui-corner-bottom\': jqueryUITheme}" ' +
'ng-style="footerStyle()"><div ng-style="{ \'cursor\': row.cursor }" ng-repeat="col in renderedColumns" ng-class="col.colIndex()" class="ngCell {{col.cellClass}} " ng-cell style="text-align:right;">' +
'{{getTotal(col.field)}}</div></div>'
};

А затем определите $scope.getTotal, чтобы он делал все, что вы хотите.

person Salas    schedule 09.04.2015

Возможно, это не лучшее решение, но в итоге я добавил итоговую строку вверху нижнего колонтитула. https://github.com/mchapman/forms-angular/commit/9f02ba1cdafe050f5cb5e7bb7d26325b28c8>5ad

person baldmark    schedule 03.10.2013

без изменения сетки ng вы можете просто предоставить свой собственный шаблон нижнего колонтитула, который каким-то образом получает общее количество для каждого столбца. В моем случае, когда я «собираю» таблицу из данных сервера, я также накапливаю хэш итогов.

Мой шаблон выглядит так:

    total_cell_footer = """
<div ng-show="showFooter" class="ngFooterPanel" ng-class="{'ui-widget-content': jqueryUITheme, 'ui-corner-bottom': jqueryUITheme}" ng-style="footerStyle()">
    <div class="ngTotalSelectContainer" >
            <div ng-style="{ 'cursor': row.cursor }" ng-repeat="col in renderedColumns" ng-class="col.colIndex()" class="ngCell {{col.cellClass}}">
                <span class="ngCellText">{{ get_total(col) | currency:"$"}} </span>
            <div class="ngVerticalBar" ng-style="{height: rowHeight}" ng-class="{ ngVerticalBarVisible: !$last }">&nbsp;</div>
        </div>
    </div>
</div>
    """

Функция get_total определена в моей области (которая является родителем области ngGrid, следовательно, унаследована) следующим образом:

    $scope.get_total= (col) ->
    # used by the footer template to access column totals.
    $scope.totals[col.field]
person aabes    schedule 22.11.2013

Взгляните на пример «Пейджинг на стороне сервера», в нем есть именно то, что вам нужно! Вы можете нарезать и нарезать кубиками в зависимости от того, что вам нужно.

http://angular-ui.github.io/ng-grid/

в настройках сетки поставь

enablePaging: true,

        showFooter: true,
        showFilter: true, 

        totalServerItems: 'totalServerItems',
        pagingOptions: $scope.pagingOptions,

и наверху

$scope.pagingOptions = {
        pageSizes: [100, 500, 1000],
        pageSize: 100,
        totalServerItems: 0,
        currentPage: 1
    };
$scope.setPagingData = function (data, page, pageSize) {

    var pagedData = data.slice((page - 1) * pageSize, page * pageSize);
    $scope.myData = pagedData;
    **$scope.pagingOptions.totalServerItems = data.length**;
    if (!$scope.$$phase) {


        $scope.$apply();
    }
};
person user2601122    schedule 23.07.2014
comment
он запрашивает строку с общим количеством столбцов в нижнем колонтитуле, а не общий размер строки - person michelem; 05.02.2015