我正在尝试使用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来证明这一点。这个问题是排序不起作用。我应该编写自定义过滤器吗?
答案 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 是一种模式,可用于将过滤器与跟踪表达式一起应用于项目。