1. ホーム
  2. angularjs

AngularJS orderByがngOptionsのtrack byで機能しない?

2023-09-30 12:30:33

質問

私は ngOptionstrack 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で作成しました。 でデモしています。これの問題は、ソートが機能しないことです。カスタムフィルタを書くべきでしょうか?

どのように解決するのですか?

フィルタによるトラッキングを利用するために track by をフィルタの後に追加する必要があります。

代わりにこれを試してみてください。

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

のドキュメントは ngRepeat のドキュメントでは、特に "Arguments" セクションでこのことに言及しています。

追跡式を指定する前に、式にフィルタを適用する必要があります。

例えば item in items | filter:searchTextトラック by item.id は、トラッキング式と組み合わせてアイテムにフィルタを適用するために使用されるかもしれないパターンです。