0

尽量减少代码(避免编写排序函数)。我有一个可排序的简单数据表。

此示例中的问题是“分数”没有按数字排序。用户“Julie”的得分最低为“9.12”,但在排序时,它似乎是按词汇排序的。

该示例是orderby 上的角度文档中使用的示例的修改版本

这是代码片段和相关的 plunker。

<pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
  <hr/>
  <table class="user">
    <tr>
      <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a>
          (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th>
      <th><a href="" ng-click="predicate = 'score'; reverse=!reverse">user score</a></th>
      <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th>
    </tr>
    <tr ng-repeat="user in users | orderBy:predicate:reverse">
      <td>{{user.name}}</td>
      <td>{{user.score}}</td>
      <td>{{user.age}}</td>
    </tr>
  </table>

http://plnkr.co/edit/Ytpj3SUgtLKQvQvB4Yhb

4

1 回答 1

3

问题是您的数据结构中的score属性是一个字符串。你可以:

A)将其更改为数字score:9.12 instead of score:'9.12' http://plnkr.co/edit/YItGeFfFLN8OnXeejv7m?p=preview

B)如果您无法更改数据,请为您的 orderBy 的表达式部分编写一个函数(“Getter 函数。此函数的结果将使用 <、=、> 运算符进行排序”)将返回字符串到一个数字进行比较。<tr ng-repeat="user in users | orderBy:yourfunction:reverse">

于 2014-03-13T17:48:08.387 回答