我有一个简单的问题。当我尝试订购ID时,订购方式就像
1,12,13,2,20
所以我认为它假定这是一个字符串。
我尝试使用数字,但没有帮助。
我该怎么办?
<th class="text-center">
Ticket ID
<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;
};
答案 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);
...