Javascript / AngularJS-将字符串按顺序转换为数字

时间:2018-07-04 13:29:16

标签: javascript html angularjs

我有一个简单的问题。当我尝试订购ID时,订购方式就像

  

1,12,13,2,20

所以我认为它假定这是一个字符串。

我尝试使用数字,但没有帮助。

我该怎么办?

thead

<th class="text-center">
    Ticket ID&nbsp;
    <a uib-tooltip="Sort by" ng-click="vm.sortBy('TICKET_ID');">
        <i class="glyphicon glyphicon-sort pull-right"></i>
    </a>
</th>

身体

 <tr class="text-center" ng-repeat="ticket in filteredTickets = (vm.tickets | 
     orderBy : vm.propertyName : vm.reverse | 
     filter : vm.search | 
     limitTo : vm.itemsPerPage : vm.itemsPerPage * (vm.currentPage-1))">                  
     <td>{{ticket.TICKET_ID | number}</td>
     <!-- 'number' doesn't help... -->

控制器

// table ordering
vm.propertyName = 'TICKET_ID';
vm.reverse = false;

vm.sortBy = function(propertyName) {
    vm.reverse = !vm.reverse;
    vm.propertyName = propertyName;
};

2 个答案:

答案 0 :(得分:2)

只需将字符串值转换为int并让angularB的orderBy过滤器为您完成工作

$scope.getNumber = function(row){
    return parseInt(row.TICKET_ID);
};

<tr class="text-center" ng-repeat="ticket in tickets | orderBy:getNumber:true"> 

orderBy还为asc / desc排序采用了第二个参数(真/假)

答案 1 :(得分:2)

您不应使用orderBy,也不应在angularJs应用中进行过滤。由于({compiler supports a zero-length array):

  

Angular不提供用于过滤或排序列表的管道。熟悉AngularJS的开发人员将其称为filter和orderBy。 Angular中没有等效项。

     

这不是疏忽。 Angular不提供此类管道,因为它们的性能不佳并阻止了主动缩小。 filter和orderBy都需要引用对象属性的参数。在此页面的前面,您了解到此类管道一定是不纯的,并且Angular在几乎每个变更检测周期中都调用不纯管道。

     

过滤,尤其是排序是昂贵的操作。当Angular每秒多次调用这些管道方法时,即使是中等大小的列表,用户体验也会严重恶化。 filter和orderBy经常在AngularJS应用中被滥用,导致人们抱怨Angular本身运行缓慢。 这种间接收费是公平的,因为AngularJS首先通过提供filter和orderBy来准备此性能陷阱。


相反,在您的控制器中实现简单的排序和过滤逻辑,并将经过排序和过滤的数据传递给ng-repeat;现在,您可以精确地定义何时以及如何进行排序,过滤……。

在您的控制器中,转换就像

一样容易
Number(anyString);

...