0

Zur Zeit habe ich keine Möglichkeit, die Spalten meiner Liste mit dem orderBy -Filter zu sortieren. Das Problem, was ich habe, ist ein verschachtelter ngRepeat.Spalten in verschachtelter ng-Wiederholung sortieren (AngularJS)

Ausblick:

<md-list> 
     <md-list-item> 
      <span ng-repeat="item in ::hItems track by $index" ng-click="sortBy(item)" flex> 
       {{ ::item }} 
      </span> 
     </md-list-item> 
     <md-divider></md-divider> 
     <md-list-item ng-repeat="cItem in ::cItems | orderBy:sortType:sortReverse track by $index"> 
      <span ng-repeat="(key, value) in ::cItem track by $index" flex> 
       {{ ::value }} 
      </span> 
      <md-divider></md-divider> 
     </md-list-item> 
</md-list> 

Sobald der Benutzer klicken Sie auf eine Spalte sortBy die Funktion Header wird aufgerufen werden. Die Funktion wird in der Steuerung wie folgt umgesetzt:

//Default values: 
$scope.sortType = 'NAME'; 
$scope.sortReverse = false; 
var orderBy = $filter('orderBy'); 

//sortBy func: 
function sortBy(columnKey) { 
    $scope.sortType = columnKey; 
    $scope.sortReverse = !$scope.sortReverse; 
    $scope.cItems = orderBy($scope.cItems, $scope.sortType, $scope.sortReverse); 
} 

Die Liste sortiert nur durch den Standardwert name. Hier ist die Array-Ausgabe von GET-Anfrage:

//JSON data 
[ 
    { 
     "ArtNo": "DE123", 
     "SHORTCODE": "ABC", 
     "NAME": "article one", 
     "QUANTITY": 3, 
     "GROUPID": 1, 
     "ACTIVE": 1 
    },... 
] 

Also, ich brauche verschachteltes ngRepeat, weil, wie Sie das Array sehen mit Schlüsselnummern und Objektwerten =>[0:Object, 1:Object...] definiert ist. Ich brauche nur eine Lösung für meine sortBy-Funktion. Hat jemand eine Idee?

Das folgende ist meine Ausgabeliste:

ArtNo | SHORTCODE | NAME   | QUANTITY 
DE123 | ABC001 | article one | 3 
DE456 | ABC002 | article two | 8 
DE789 | ABC003 | article three | 4 
DE321 | ABC004 | article four | 13 
.... 
+1

Bitte vereinfachen Sie Ihre Frage Code und bieten eine funktionierende Geige ... –

+0

@EliasSoares Was verstehst du nicht in meinem Code? Dann kann ich meinen Thread bearbeiten. – yuro

+0

Was ist 'md-list',' md-list-item', 'md-divider'? Ich weiß, dass dies möglicherweise keinen Einfluss auf das Problem hat, aber wenn Sie den kleinsten Code bereitstellen, mit dem das Problem auftritt, ist es für Sie (und uns) leicht, das Problem zu finden. –

Antwort

1

Wenn ich richtig verstanden, Sie dieses Verhalten wollen:

  • Benutzer auf gewünschte Spalte zu sortieren, und der Tabelleninhalt wird bestellt diese Spalte.
  • Der Benutzer klickt erneut und die Sortierrichtung wird umgekehrt.

Richtig?

Warum also bestellen Sie zweimal Ihr Array?

//Default values: 
$scope.sortType = 'NAME'; 
$scope.sortReverse = false; 
var orderBy = $filter('orderBy'); 

//sortBy func: 
function sortBy(columnKey) { 
    $scope.sortType = columnKey; 
    $scope.sortReverse = !$scope.sortReverse; 
    // You do not need to order anything here. Just define your orderby parameters here to be used on view. 
} 

Echt Lösung

Wie bei Frage Autor reden, haben wir das Hauptproblem hier:

Die Verwendung von :: Syntax auf ng-repeat aus der Beobachtung Änderungen auf OrderBy Filterwinkel vermeidet, so die Änderung hat nicht über die Sichtweise nachgedacht.

+0

Ich habe deine Antwort gewählt. Ich denke, es hilft mir :) – yuro

Verwandte Themen