我有一个ng-repeat使用ng-switch来分隔ng-repeat内部的部分,我想在ng-switch组上应用orderby过滤器,但我似乎无法使它工作:
<div ng-controller="MyCtrl">
I have {{friends.length}} friends. They are:
<ul>
<li ng-repeat="friend in sortedFriends">
<ng-switch on="$first || friend.age != sortedFriends[$index-1].age">
<div ng-switch-when="true" class="group">Group of {{friend.age}} years old. Previous: <i>{{sortedFriends[$index-1].age}}</i></div>
</ng-switch>
<b>[{{$index + 1}}]</b> {{friend.name}} who is {{friend.age}} years old.
</li>
</ul>
</div>
jsfiddle 任何想法?
这样的事情就是我想要实现的目标: <div ng-controller="MyCtrl">
I have {{friends.length}} friends. They are:
<ul>
<li ng-repeat="friend in sortedFriends | orderBy:predicate">
<ng-switch on="$first || friend.age != sortedFriends[$index-1].age" ng-click="predicate = 'age'; reverse=!reverse">
<div ng-switch-when="true" class="group">Group of {{friend.age}} years old. Previous: <i>{{sortedFriends[$index-1].age}}</i></div>
</ng-switch>
<b>[{{$index + 1}}]</b> {{friend.name}} who is {{friend.age}} years old.
</li>
</ul>
</div>
答案 0 :(得分:2)
讨论结果:
按年龄排序并按点击更改顺序 并按名称单击组名称命令
因为你正在检查
friend.age != friends[$index-1].age
你不能在ng-repeat中使用orderBy,因为ng-repeat使用过滤器返回的有序数组,但你是从初始无序数组中检查
最好的方法是使用范围函数进行排序
$scope.orderFriends = function(ageOrder,nameOrder){
return orderByFilter($scope.friends,[ageOrder,nameOrder]);
}
ageOrder和nameOrder采用"+age"
,"-name"
等值。
请注意,点击群组标题会更改所有群组的名称顺序。
我最终会将具有分组功能的朋友(使用类似下划线的东西)分组,并使用orderby过滤器来查找姓名和年龄。因此,名称可以在组内单独排序。 (FIDDLE,分组可能会做得更好,但基本的想法就在那里)
答案 1 :(得分:1)