在ng-repeat里面的ng-switch里面有什么angularJS?

时间:2014-05-24 10:32:32

标签: javascript angularjs

我有一个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>

更新小提琴: http://jsfiddle.net/CvKNc/58/

2 个答案:

答案 0 :(得分:2)

讨论结果:

FIDDLE

按年龄排序并按点击更改顺序 并按名称单击组名称命令

因为你正在检查

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)

不太确定您要查找的内容,但如果您需要在数组中进一步排序,则可以使用数组作为orderBy定义。

['+age','name']

http://jsfiddle.net/csrow/BaqEg/