繁体   English   中英

Angular OrderBy索引不起作用

[英]Angular OrderBy index not functioning

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

我已经基于Angular文档创建了一个Plunker。 我的目标是使默认的orderBy(仅显示此处的代码)不进行排序,以便以后可以更改orderBy属性。

Plunker: 下面的Plunker或HTML

  <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>

柱塞 似乎这是从Angular 1.2到1.3的更改,我在不同版本的angular上测试了工作代码,在1.2中可以传递空顺序,并且将按索引顺序进行排序,但是在1.3和1.4中,排序方式不同

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

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

因此,仅在确实需要orderBy过滤器时,才使用它。

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


通过Appart,您还可以定义一个自定义比较器方法并使用它:

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

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

但是我真的不建议您使用它,因为您将进行不必要的计算。

我一直通过对列表进行预排序来解决此问题。

然后,我的职能部门完成了以前依靠Angular为我做的所有工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM