2013-05-09 15 views
30

Il mio array è: BS. La sua struttura è:orderBy non funziona come previsto: Angularjs

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

BS è un array. Ogni valore è un oggetto JSon con file di nome.

Voglio ordinare tutti i valori di BS in base al loro nome. Sto cercando:

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

Ho anche provato: orderBy:name e orderBy:item[name]. Niente funziona. Perché questo non funziona e qual è il codice corretto?

risposta

79

Dai un'occhiata alla sotto 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

Una cosa da notare qui è che se si utilizza il 'pista per ---' sintassi, il vostro orderBy non funzionerà più. – dmackerman

+42

@dmackerman, 'track by ---' deve essere sempre alla fine dell'intera espressione, anche a destra dei filtri. Quindi 'orderBy' funziona come previsto. – nilskp

+0

@nilskp, c'è qualche documentazione che indichi perché 'track by' deve essere alla fine? Mi chiedo perché 'track by' è permesso in qualsiasi altro posto che alla fine, se causa un comportamento indesiderato. – adam0101