Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/AngularJS-将字符串转换为orderBy中的数字_Javascript_Html_Angularjs - Fatal编程技术网

Javascript/AngularJS-将字符串转换为orderBy中的数字

Javascript/AngularJS-将字符串转换为orderBy中的数字,javascript,html,angularjs,Javascript,Html,Angularjs,我有一个简单的问题。当我尝试订购ID时,它的订购方式如下 1,12,13,2,20 所以我认为它假设这是一个字符串 我试着用那个号码,但并没有任何帮助 我能做什么 泰德 只需将字符串值转换为int,并让angularjs的orderBy过滤器为您完成这项工作 $scope.getNumber = function(row){ return parseInt(row.TICKET_ID); }; <tr class="text-center" ng-repeat="ticket i

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

1,12,13,2,20

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

我试着用那个号码,但并没有任何帮助

我能做什么

泰德
只需将字符串值转换为int,并让angularjs的orderBy过滤器为您完成这项工作

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

<tr class="text-center" ng-repeat="ticket in tickets | orderBy:getNumber:true"> 
$scope.getNumber=函数(行){
返回parseInt(行票证ID);
};

此外,orderBy为asc/desc排序接受第二个参数(真/假)

您不应该在angularJs应用程序中使用orderBy,也不应该使用过滤器。在angular中,移除的两个管道,因为():

Angular不提供用于筛选或排序列表的管道。熟悉AngularJS的开发人员将其称为filter和orderBy。在角度上没有等价物

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

过滤,尤其是排序是昂贵的操作。当Angular每秒多次调用这些管道方法时,即使是中等大小的列表,用户体验也会严重降低。在AngularJS应用程序中,filter和orderBy经常被滥用,导致人们抱怨AngularJS本身速度慢从间接意义上讲,这种收费是公平的,因为AngularJS首先提供了过滤器和orderBy,从而准备了这种性能陷阱。


相反,在控制器中实现一个简单的顺序和过滤逻辑,并将经过排序和过滤的数据传递给ng repeat;现在,您可以准确定义何时以及如何排序、筛选。。。应该这样做

在控制器中,转换与

Number(anyString);

错误是什么?请编辑您的问题。我们不知道您在问什么您需要将JSON中的值从字符串更改为数字,或者您使用将这些值转换为数字的自定义筛选器我怀疑angular尝试应用的默认实现,默认情况下会将值转换为字符串,您可以通过在sortBy函数中手动编写类似于
a.prop1-b.prop1
的内容进行排序。是的,JSON将数字作为字符串,但我无法在服务器端对其进行更改。我能做什么?在控制器中更改
vm.tickets
,或者编写一个自定义过滤器,作为
orderBy
haha@user10031499。我不认为编写排序函数需要很多工作——作为一名开发人员的一个好处是,您可以决定要提供什么样的质量……您可以使用加号+作为快捷方式(
+anyString
)。
// table ordering
vm.propertyName = 'TICKET_ID';
vm.reverse = false;

vm.sortBy = function(propertyName) {
    vm.reverse = !vm.reverse;
    vm.propertyName = propertyName;
};
$scope.getNumber = function(row){
    return parseInt(row.TICKET_ID);
};

<tr class="text-center" ng-repeat="ticket in tickets | orderBy:getNumber:true"> 
Number(anyString);