使用AngularJS排序减去数字字符串' orderBy'

时间:2016-06-14 15:09:23

标签: angularjs string integer ng-repeat

我使用orderBy指令反向排序一些数字字符串,可以与ngRepeat一起使用。

 <div ng-repeat="item in standings| orderBy:['-points', '-gd', 'team_name']">
      <p>{{item.gd}}
 </div>

所以它是按顺序排列(按优先顺序排列)&#39;点&#39;然后&#39; gd&#39; (目标差异),然后&#39; team_name&#39; (按字母顺序)。

gd值正确按降序排序。我遇到的问题是负数值。在这种情况下,数字作为字符串返回,而orderBy函数并不理解"-2"小于"-1",而是相反。

如何使用ng-repeat将数值解析为整数,特别是用减号解决这个排序问题?

我考虑过制作一个过滤器,例如:{{item.gd | *filterHere* }},但初始ng-repeat指令不会看到这一点,它需要将源值作为整数。

任何帮助都将不胜感激。

更新

我尝试过这个过滤器,但是当我在ng-repeat中调用它时,它什么都不返回:

 app.filter('stringToInteger', function() {
       return function(input) {
             angular.forEach(input, function(value) {
                 parseInt(value.gd);
             })
          };
       return input;
   });

在视图中

<p ng-repeat="item in standings | orderBy: '-gd' | stringToInteger">GD = {{item.gd}}</p>

1 个答案:

答案 0 :(得分:2)

过滤器应该是这样的。

app.filter('stringToInteger', function() {
   return function(input) {
         angular.forEach(input, function(value) {
            value.gd =  parseInt(value.gd);
         })
   return input;
   };
});

像这样使用它。

<tr ng-repeat="team in teams | stringToInteger | orderBy:'-gd'">

Plunker链接以供参考。

https://plnkr.co/edit/GRfMJnRdT1Gu5RXO9elA?p=preview