AngularJS orderBy不适用于选项中的跟踪?

时间:2014-05-29 03:54:42

标签: angularjs

我正在尝试使用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;
 }

我写了snippet in JSBin来证明这一点。这个问题是排序不起作用。我应该编写自定义过滤器吗?

1 个答案:

答案 0 :(得分:178)

为了对过滤器使用跟踪,需要在过滤器后添加track by表达式。

请改为尝试:

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

ngRepeat的文档在“参数”部分提到了这一点,特别是:

  

在指定跟踪表达式之前,应将过滤器应用于表达式。

  

例如:项目中的项目filter:searchText track by item.id 是一种模式,可用于将过滤器与跟踪表达式一起应用于项目。