如何使 Angular 的 ng-repeat
指令按照每个项目的实际值而非每个项目属性的值来排序?
例如:
<ul>
<li ng-repeat="item in items | orderBy:'WHAT_GOES_HERE??'">{{item}}</li>
</ul>
这里有一个可以玩耍的示例: http://jsbin.com/okatur/1/edit
我知道我可以在数组上使用.sort()
, 但这是我的唯一选择吗?
如何使 Angular 的 ng-repeat
指令按照每个项目的实际值而非每个项目属性的值来排序?
例如:
<ul>
<li ng-repeat="item in items | orderBy:'WHAT_GOES_HERE??'">{{item}}</li>
</ul>
这里有一个可以玩耍的示例: http://jsbin.com/okatur/1/edit
我知道我可以在数组上使用.sort()
, 但这是我的唯一选择吗?
从 AngularJS 1.3.0-rc.5 开始,如果未提供任何其他参数,orderBy
过滤器(参见文档)将自动使用其项目对数组进行排序。
<li ng-repeat="item in items | orderBy">{{item}}</li>
orderBy
过滤器(参见历史文档)也可以接受一个函数作为第二个参数,其返回值将使用 <
、=
和 >
操作符进行比较。您可以简单地使用 angular.identity
函数(参见文档)来达到这个目的。
$scope.identity = angular.identity;
<li ng-repeat="item in items | orderBy:identity">{{item}}</li>
angular.identity
,而不必在JS中将其保存到$scope.identity
中? - tuff$scope
中定义的变量。 - BlackholeorderBy:true:true
在>1.3.0-rc.5中进行反向排序。 - Braden Steffaniakarray | orderBy
等同于array | orderBy:'+'
。如果您想按相反的顺序排序,因此您只需执行array | orderBy:'-'
即可。在第一个JS Bin链接中尝试一下吧;-)! - Blackhole<ul>
<li ng-repeat="item in items | orderBy:'toString()'">{{item}}</li>
</ul>
$scope.items
是一个原始类型数组。 - tuff