2013-05-09 6 views
30

Mein Array ist: BS. Seine Struktur ist:orderBy funktioniert nicht wie erwartet: Angularjs

Array[317] 
0: Object 
    $$hashKey: "022" 
    name: "Los Angeles Comm." 
. 
. 
. 
.. 

BS ist ein Array. Jeder Wert ist ein JSon-Objekt mit dem Namensfeld.

Ich möchte alle Werte von BS nach ihrem Namen sortieren. Ich versuche:

<option ng-repeat="item in BS | orderBy:item.name" value="{{item.name}}">{{item.name}}</option> 

Ich habe auch versucht: orderBy:name und orderBy:item[name]. Nichts funktioniert. Warum funktioniert das nicht und was ist der richtige Code?

Antwort

79

Hier finden Sie unten html

<!DOCTYPE html> 
<html ng-app="app"> 
<head> 
    <title></title> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script> 
</head> 
<body> 
    <div ng-controller="item"> 
     <ul> 
      <li ng-repeat="item in items|orderBy:'name'"> 
       {{item.name}} 
      </li> 
     </ul> 
    </div> 
    <script> 
     var AppModule = angular.module('app', []); 
     function item($scope) { 
      $scope.items = [{ name: 'tur' }, { name: 'abc' }, { name: 'xyx' }]; 

     } 
    </script> 
</body> 
</html> 
+11

Eine Sache, hier zu beachten ist, dass wenn Sie die 'Spur verwenden, indem ---' Syntax, Ihre orderBy wird nicht mehr funktionieren. – dmackerman

+42

@dmackerman, 'track by ---' muss immer am Ende des gesamten Ausdrucks stehen, auch auf der rechten Seite der Filter. Dann funktioniert 'orderBy' wie erwartet. – nilskp

+0

@nilskp, gibt es irgendeine Dokumentation, die erklärt, warum 'track by' am Ende sein muss? Ich frage mich, warum 'track by' irgendwo anders als am Ende erlaubt ist, wenn es unerwünschtes Verhalten verursacht. – adam0101