angular.filter插件中的orderby过滤器似乎没有正确排序

时间:2014-09-27 18:35:00

标签: angularjs

我正在使用Angular Filter插件根据“Row”参数将tr分组到表中。

下面的代码根据行值

构造Tr
<tbody>
      <tr ng-repeat="row in data |groupBy: 'Row' | orderBy : 'Row'">
          <td ng-repeat="person in row">{{person.Row}}.{{person.Label}}</td>    
      </tr>
</tbody>

但第10和第11项出现在第2和第3行。 我该如何解决这个问题?

Plnkr:http://plnkr.co/edit/GaW4XsAwlDkFs61VXkOl?p=preview

2 个答案:

答案 0 :(得分:1)

orderBy必须是链接中的最后一个过滤器(当您将过滤器应用于另一个过滤器的结果时)。 但是,groupBy返回一个对象,orderBy期望数组作为参数 所以,你可以这样做:

<强> JS:

$scope.groups = [
    { category: 'alpha', id: 2 },
    { category: 'beta',  id: 3 }, 
    { category: 'gamma', id: 0 },
    { category: 'alpha', id: 4 },
    { category: 'beta',  id: 5 }, 
    { category: 'gamma', id: 1 }
   ];
  // retrieves the min 'id' of a collection, used for the group ordering.
  // you can use Agile.js instead. e.g: _.min(arr, 'id') 
  $scope.min = function(arr) {
    return $filter('min')
      ($filter('map')(arr, 'id'));
  }

<强> HTML:

 <ul ng-repeat="group in groups | groupBy:'category' | toArray:true | orderBy:min">
    <!-- print the group name -->
    <li>{{ group.$key }}</li>
    <!-- iterate over the group members and order each group by id -->
    <li ng-repeat="item in group | orderBy:'id'">
      {{ item }}
    </li>
</ul>

<强>结果:

  • 伽马
    • {&#34;类别&#34;:&#34;伽马&#34;&#34; ID&#34;:0}
    • {&#34;类别&#34;:&#34;伽马&#34;&#34; ID&#34;:1}
  • 阿尔法
    • {&#34;类别&#34;:&#34;阿尔法&#34;&#34; ID&#34;:2}
    • {&#34;类别&#34;:&#34;阿尔法&#34;&#34; ID&#34;:4}
  • 测试
    • {&#34;类别&#34;:&#34;测试&#34;&#34; ID&#34;:3}
    • {&#34;类别&#34;:&#34;测试&#34;&#34; ID&#34;:5}

答案 1 :(得分:0)