2017-02-27 3 views
1

angewandt habe ich dieses Beispiel: https://jsfiddle.net/3noebzgr/1/aktualisiert paginierte Tabelle nach Filter AngularJS

Alles funktioniert, außer wenn ich durch die Trikot-Nummer filtern kann ich nicht die Paginierung aktualisieren. Wenn ich also nach den Trikotnummern 1-3 suche, ist Trikot 1 auf Seite 1, Trikot 2 auf Seite 2 und Trikot 3 auf Seite 4, so dass Seite 3 leer ist. Ich möchte, dass die Tabelle neu paginiert wird, damit die gefilterte Liste auf einer Seite angezeigt wird (oder mehr, je nach Anzahl der Elemente). Das ist mein Paginieren Funktion:

$scope.paginate = function(value) { 
    var begin, end, index; 
    begin = ($scope.currentPage - 1) * $scope.numPerPage; 
    end = begin + $scope.numPerPage; 
    index = $scope.players.indexOf(value); 
    return (begin <= index && index < end); 
}; 

Dies ist, wo es angewendet wird:

<tr ng-repeat="player in players | orderBy:sortType:sortReverse | filter:byRange('Number', minNum.Number, maxNum.Number) | filter:paginate"> 
     <td>{{ player.Name }}</td> 
     <td>{{ player.Number }}</td> 
     <td>{{ player.Position }}</td> 
     <td>{{ player.Team }}</td> 
     </tr> 

Die Filter:

<select name="minNum" ng-model="minNum" ng-options="player.Number for player in players | orderBy:'Number'"> 
      <option value="">All</option> 
      </select> 

und

<select name="maxNum" ng-model="maxNum" ng-options="player.Number for player in players | orderBy:'Number'"> 
      <option value="">All</option> 
     </select> 

Ich habe andere versucht Stapel ov Erflow-Vorschläge, aber keine hat bisher funktioniert.

Antwort

0

Rerender $ scope.numPerPage muss gleich $ scope.players.length sein, wenn maxnumber angeklickt wird, so dass die Anzahl pro Seite gleich der Länge des Spielers ist. Danke

$scope.paginate = function(value) { 
    var begin, end, index; 
    begin = ($scope.currentPage - 1) * $scope.numPerPage; 
    end = begin + $scope.numPerPage; 
    index = $scope.players.indexOf(value); 

    if ($scope.maxNum !== undefined) { 
     $scope.numPerPage = $scope.players.length; 
    } 

    return (begin <= index && index < end); 
}; 
+0

Dies funktioniert, um alles auf einer Seite anzuzeigen, aber es tut dies durch Entfernen der Seitennummerierung. Gibt es eine Möglichkeit, die Paginierung beizubehalten, aber alles auf die gleiche Seite zu verschieben oder wenn die gefilterte Liste größer ist als die 'numPerPage', einfach mit der aktuellen Liste neu paginieren? – jcalton88