AngularJS orderBy funktioniert nicht mit track by in ngOptions?

72

Ich versuche , zu sortieren , ngOptionsmittrack by

Das ist meine Vorlage

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

Das ist mein Controller

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;
 }

Ich habe einen Ausschnitt in JSBin geschrieben , um dies zu demonstrieren. Das Problem dabei ist, dass die Sortierung nicht funktioniert. Soll ich einen benutzerdefinierten Filter schreiben?

Geschmacksknospen
quelle

Antworten:

185

Um Tracking mit Filtern verwenden zu können, muss der track byAusdruck nach dem Filter hinzugefügt werden.

Versuchen Sie stattdessen Folgendes:

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

In der Dokumentation wird ngRepeatdies im Abschnitt "Argumente" erwähnt, insbesondere:

Filter sollten auf den Ausdruck angewendet werden, bevor ein Verfolgungsausdruck angegeben wird.

und

Zum Beispiel: Artikel in Artikeln | filter: searchText track by item.id ist ein Muster, mit dem ein Filter in Verbindung mit einem Tracking-Ausdruck auf Elemente angewendet werden kann.

Ahmad Mageed
quelle
Vielen Dank, dass Sie darauf hingewiesen haben! Eine Frage: Wie wäre es, wenn Sie eine Reihenfolge nach Funktion anstelle einer Eigenschaft verwenden möchten?
Airn5475