Angular OrderBy索引无法正常工作

时间:2015-06-11 16:48:08

标签: javascript angularjs

我在指令上设置默认orderby。在某些点击事件中,我按照点击的列更改订单。但是,当我尝试通过索引设置默认顺序时,我得到了一些非常奇怪的结果。

我已根据Angular文档创建了一个Plunker。我的目标是让默认的orderBy(这里只显示代码)不执行排序,以便稍后我可以更改orderBy属性。

Plunker:Plunker Or HTML Below

  <div ng-controller="ExampleController">
    <table class="friend">
      <tr>
        <th>Name</th>
        <th>Phone Number</th>
        <th>index</th>
      </tr>
      <tr ng-repeat="friend in friends | orderBy:'index'">
        <td>{{friend.name}}</td>
        <td>{{friend.phone}}</td>
        <td>{{friends.indexOf(friend)}}</td>
      </tr>
    </table>
  </div>

Plunker。看起来好像这是从Angular 1.2到1.3的变化我在不同版本的角度上测试了工作代码,在1.2中你可以传递一个空的顺序,它将按索引排序,但在1.3和1.4中它的排序方式不同

2 个答案:

答案 0 :(得分:1)

这里根本不需要任何排序,阵列已经按照您希望的顺序排列。假设您有一个变量$scope.orderByField来定义您要用于订购的属性,您可以执行以下操作:

<tr ng-repeat="friend in (orderByField ? (friends | orderBy : orderByField) : friends)">

因此,只有在您确实需要时才使用orderBy过滤器。

Plunker http://plnkr.co/edit/kXOSF4adOohDDxLEtnGT?p=preview

从中你可以定义自定义比较器方法并使用它:

$scope.sortByIndex = function(a, b) {
  return $scope.friends.indexOf(a) - $scope.friends.indexOf(b)
}

<tr ng-repeat="friend in friends | orderBy : sortByIndex">

但我不建议使用它,因为你会做不必要的计算。

答案 1 :(得分:0)

我通过预先列出我的清单解决了这个问题。

然后我的功能完成了我以前依赖Angular为我做的所有工作。

作为一个FYI,我还将此作为bug提交给angularJS团队。他们报告说它将在下一个版本中修复(https://github.com/angular/angular.js/issues/12100