2016-06-15 7 views
0

I Tabellenüberschriften wie die folgenden haben, die die orderByField und reverseSort Variable:auf paginierte Sortiertisch sortiert nur aktuelle Seite

 <th class='header'> 
<a href="" ng-click="orderByField='success'; reverseSort = !reverseSort"> 
Successes <span ng-show="orderByField == 'success'"><span ng-show="!reverseSort" 
class="glyphicon glyphicon-chevron-up"></span><span ng-show="reverseSort" class="glyphicon glyphicon-chevron-down"></span></span> 
    </a> 
    </th> 

Ich habe eine ng-repeat:

<tbody> 
    <tr ng-repeat="item in items| filter:paginate |orderBy:sorter:reverseSort"> 
     <td>{{item.name}}</td> 
     <td>{{item.failPercentage}}</td> 
     <td>{{item.failure}}</td> 
     <td>{{item.success}}</td> 
    </tr> 
</tbody> 

ich verwenden ui.bootstraplibrary für auch diese:

  <uib-pagination total-items="totalItems" 
          ng-model="currentPage" 
          max-size="15" boundary-links="true" 
          items-per-page="numPerPage" class="pagination-sm"> 
      </uib-pagination> 

In meinem Controller Ich habe eine paginate Funktion und sorter Funktion, die nur meine ng-repeat

$scope.paginate = function (value) { 
    var begin, end, index; 
    begin = ($scope.currentPage - 1) * $scope.numPerPage; 
    end = begin + $scope.numPerPage; 
    index = $scope.items.indexOf(value); 
    return (begin <= index && index < end); 
}; 
$scope.sorter = function (item) { 
     return item[$scope.orderByField]; 
}; 

meine Art angewandt werden, verwendet den Standardsortier, aber wenn ich Art tun, sortiert sie jede Seite unabhängig voneinander. Wie wenden Sie die Sortierung auf alle Seiten an, die voneinander abhängig sind (und den Benutzer dann an die erste Seite der Seitennummerierung senden)?

Antwort

1

Sie tun es in falscher Reihenfolge - zuerst müssen Sie sortieren, dann paginieren.

item in items| orderBy:sorter:reverseSort | filter:paginate 

Beachten Sie auch, dass Ihr Paginieren Funktion genau das tut, was Array.slice tut, so besser Sie Ihre eigenen Filter machen:

app.filter('slice', function() { 
    return function(arr, pageSize, pageNum) { 
    ... 
    return arr.slice(begin, end); 
    }; 
}); 

item in items| orderBy:sorter:reverseSort | slice:numPerPage:currentPage 

tiefer gehen: Filter an großen Arrays ist eine schlechte Praxis, da immer dann, wenn jeder Rahmen variable Änderungen dieser Filter wird gestartet. Wenn Sie ein Array von d. H. 10k Elementen haben, die weh tun können. Also besser manuell in ng-click auf th sortieren.

+0

das Umschalten des Filters und orderby hat nicht funktioniert. –

Verwandte Themen