2014-10-07 81 views
-1

如果我有值的数组:AngularJS自定义排序

[1,2,3,4,N/A,N/A,N/A]

如何创建自定义排序orderBy使字符串总是出现在底部?

升序例如:

[1,2,3,4,N/A,N/A,N/A]

降序例如:

[4,3,2, 1,n/a,n/a,n/a]

我试过使用函数表达式,但是并没有做我所需要的。函数表达式只返回要排序的值,但是如何使用我自己的排序顺序?

回答

4

您可以创建自定义过滤器,根据需要对阵列进行排序。

app.filter('customOrderBy', function() { 
    return function (arr) { 

    var numbers = []; 
    var strings = []; 

     angular.forEach(arr, function(item){ 
      if(typeof item == 'number'){ 
       numbers.push(item);  
      } 
      else 
       strings.push(item);  
      }); 

     return numbers.sort().concat(strings); 
    }; 
}); 

阵列上你的NG-重复看起来象下面这样:

<div ng-repeat="item in array | customOrderBy track by $index"> 

请注意,我用“轨道由$指数”那里,因为AngularJS NG重复指令,不允许在重复中继器。 (你在你的数组中有重复的“n/a”字符串)

Plunker这里按升序排列[2,3,1,4,'n/a','n/a ','n/a']:http://plnkr.co/edit/jmHly0lDb5IVeWd2XvHp?p=preview

+0

非常感谢,我是新角度,这正是我需要的。 – 2014-10-07 02:04:50