AngularJS Paging orderBy влияет только на отображаемую страницу

Может ли кто-нибудь указать мне правильное направление, чтобы найти способ исправить то, как пейджинг и orderBy работают вместе в Angular?

В настоящее время я могу orderBy и выводить результаты data[], но фильтр orderBy влияет только на каждую страницу в отдельности.

Например, если я сортирую в обратном порядке по идентификатору, на странице 1 будет список 10-1, а на странице 2 будет список 15-11, в отличие от начала с 15 и перехода к 1 к концу второй страницы.

У меня есть базовая скрипка здесь http://jsfiddle.net/ZbMsR/

Вот мой контроллер:

function MyCtrl($scope) {
    $scope.currentPage = 0;
    $scope.pageSize = 10;
    $scope.orderBy = "-appId";
    $scope.data = [
        {'appId': 1}, {'appId': 2}, {'appId': 3}, {'appId': 4}, {'appId': 5}, {'appId': 6}, {'appId': 7}, {'appId': 8}, {'appId': 9},{'appId': 10}, {'appId': 11}, {'appId': 12}, {'appId': 13}, {'appId': 14}, {'appId': 15}
];

    $scope.numberOfPages=function(){
        return Math.ceil($scope.data.length/$scope.pageSize);                
    };
}

//We already have a limitTo filter built-in to angular,
//let's make a startFrom filter
app.filter('startFrom', function() {
    return function(input, start) {
        start = +start; //parse to int
        return input.slice(start);
    }
});

Вот соответствующая часть моего просмотра

 <strong>Sort By:</strong> <a ng-click="orderBy = 'appId'; reverse=!reverse">Newest</a>
 <ul>
    <li ng-repeat="item in data | startFrom:currentPage*pageSize | limitTo:pageSize | orderBy:orderBy:reverse">
        {{item.appId}}
    </li>
 </ul>

person Logan W    schedule 07.01.2013    source источник


Ответы (1)


Если у вас есть полное разбиение на страницы на стороне клиента, вы можете просто изменить порядок фильтров:

<li ng-repeat="item in data | orderBy:orderBy:reverse | startFrom:currentPage*pageSize | limitTo:pageSize ">

Это то, что вы ожидали?

person Valentyn Shybanov    schedule 07.01.2013
comment
красивая! Собирался пригнуться, чтобы написать тонну кода. Фу! - person Peter Drinnan; 05.06.2015
comment
@Анамадейя; Скорее всего, он работает в том порядке, в котором встречается каждая отдельная команда. Таким образом, он ограничивается размером страницы, а затем упорядочивается функцией упорядочения. Переворачивая их, он упорядочивает функцию упорядочивания, ТОГДА ограничивает размер страницы. - person Polantaris; 26.09.2016