使用orderBy排序表不能按预期工作

时间:2016-08-08 01:22:50

标签: javascript angularjs angular-filters

我需要对表格数据进行排序,我使用了orderBy过滤器,它从上一行开始排序 plunker例子将是可以解释的

DEMO

HTML:

<a-sky>

JS:

<table class="friends">
  <thead>
    <tr class='table-head'>
      <th scope="col">Candidate Name</th>
      <th scope="col" ng-repeat="a in [1,2,3,4]" ng-click="sortBy('candidateData.rating')"><a style="cursor:pointer">Round{{a}}</a></th>
    </tr>
  </thead>
  <tbody>
    <tr ng-repeat="candidate in aCandidateDetails| orderBy:propertyName:reverse">
      <td>
        <div>{{candidate.name}}</div>
      </td>
      <td ng-repeat="candidateData in candidate.ratings">
        <div ng-if="candidateData.rating">
          {{candidateData.rating}}
        </div>
        <span ng-if="!candidateData.rating">    - NA -   </span> </td>
      <td data-title="Status">
        <div>{{candidate.interviewStatus}}</div>
      </td>
      <td><a href="" ng-model='candidate' ng-click="fnCandidateFeedbackDetails(candidate.uniqueId,candidate._id)"><i class="fa fa-info-circle" aria-hidden="true"></i></a></td>
    </tr>
  </tbody>
</table>

JSON:

$scope.propertyName = 'name';
  $scope.reverse = true;
  $scope.sortBy = function(propertyName) {
    $scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false;
    $scope.propertyName = propertyName;
  };

如果我们点击回合然后它应该根据未按顺序降序的等级进​​行排序

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您必须编写自己的比较器并将其与orderBy一起使用。这样的事情。

$scope.ratingComparator = function(v1, v2) {
    if (v1.type === 'object') {
      var obj1 = $scope.aCandidateDetails[v1.index];
      var obj2 = $scope.aCandidateDetails[v2.index];
      return (obj1.ratings[$scope.sortRound].rating < obj2.ratings[$scope.sortRound].rating)? -1: 1;
    } else {
      return 1;
    }
  }

在你的HTML中,

<tr ng-repeat="candidate in aCandidateDetails| orderBy:propertyName:reverse:ratingComparator">

此外,由于数据的结构,您必须通过将其存储在范围内的某个位置来跟踪轮数。这是因为每轮都没有单独的字段。这是通过将整数传递给sortBy

来实现的
<th scope="col" ng-repeat="a in [1,2,3,4]" ng-click="sortBy('ratings', a)"><a style="cursor:pointer">Round{{a}}</a></th>

这是更新的 Plnkr

这假设评级数组按开始的整数排序。如果不是这种情况,则必须在比较器中添加逻辑以搜索已排序的整数。