2014-10-07 122 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