AngularJS orderBy不能在ngOptions中使用track by?


72

我正在尝试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中编写了一个片段来演示这一点。这样做的问题是排序不起作用。我应该编写自定义过滤器吗?

Answers:


185

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

尝试以下方法:

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

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

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

例如:item in items | filter:searchText通过item.id进行跟踪是一种模式,可用于结合跟踪表达式对项目应用过滤器。


非常感谢您指出这一点!一个问题,何时要使用按功能排序而不是属性?
Airn5475 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.