2013-05-09 2 views
30

Мой массив: BS. Его структура:orderBy не работает как ожидалось: Angularjs

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

BS - это массив. Каждое значение представляет собой объект JSon с именем.

Я хочу отсортировать все значения BS в соответствии с их именем. Я пытаюсь:

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

Я также попытался: orderBy:name и orderBy:item[name]. Ничего не работает. Почему это не работает и что такое правильный код?

ответ

79

Посмотрите на ниже 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

Одна вещь, чтобы отметить здесь, что если вы используете 'след на ---' синтаксису, ваш OrderBy больше не будет работать. – dmackerman

+42

@dmackerman, 'track by ---' должен всегда находиться в самом конце всего выражения, в том числе справа от фильтров. Тогда 'orderBy' работает так, как ожидалось. – nilskp

+0

@nilskp, есть ли какая-либо документация, в которой говорится, почему «track by» должен быть в конце? Мне интересно, почему «track by» разрешен в другом месте, кроме как в конце, если он вызывает нежелательное поведение. – adam0101

Смежные вопросы