AngularJS orderBy不是数字

时间:2014-03-13 17:39:28

标签: javascript angularjs sorting angularjs-orderby

尽量保持代码尽可能小(避免编写排序函数)。我有一个可以排序的简单数据表。

此示例中的问题是“得分”不按数字排序。用户'Julie'的得分最低为'9.12'但是在排序时似乎是词法上的。

该示例是angular docs on 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

1 个答案:

答案 0 :(得分:2)

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

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

B)如果您无法更改数据,请编写功能(&#34; Getter功能。此功能的结果将使用&lt;,=,&gt ; operator&#34;)用于orderBy的表达式部分,以便将字符串返回给一个数字进行比较。 <tr ng-repeat="user in users | orderBy:yourfunction:reverse">