AngularJS orderBy не работает с треком в ngOptions?

Я пытаюсь сортировать ngOptions с track by

Это мой шаблон

<select ng-model="asd" ng-options="user.id as user.name for user in users track by user.id | orderBy: 'name'">

Это мой контроллер

function AppCtrl($scope) {
  $scope.users = [
   {id : 25, name: 'Batista'},
   {id : 26, name: 'Ultimate Warrior'},
   {id : 27, name: 'Andre the giant'}
  ];
  $scope.name = 'asdasd';
  $scope.asd = 25;
 }

Я написал фрагмент в JSBin, чтобы продемонстрировать это. Проблема с этим - сортировка не работает. Должен ли я писать собственный фильтр?

Ответ 1

Чтобы использовать отслеживание с фильтрами, выражение track by должно быть добавлено после фильтра.

Попробуйте это вместо:

user.id as user.name for user in users | orderBy: 'name' track by user.id

Документация для ngRepeat упоминает это в разделе "Аргументы", в частности:

Перед определением выражения отслеживания следует применить фильтры к выражению.

и

Например: элемент в элементах | filter: searchText track by item.id - это шаблон, который может использоваться для применения фильтра к элементам в сочетании с выражением отслеживания.