2013-07-06 77 views
0

我以下列方式使用NG-重複打印出的清單:angularJS自定義過濾器拉出一個特定值

<ul ng-controller="myController"> 
    <li ng-repeat="somename in somenames"> 
     <a>{{ somename.name }}</a> 
    </li> 
</ul> 

和值從控制器來像:

myApp.controller('myController', ['$scope', 
    function($scope) { 
     $scope.somenames = [{ name: 'group1'},{name: 'group2'},{name: 'admin'},{name: 'group4'}]; 
    } 
]); 

我想要實現一個過濾器,值'admin'將始終保留在列表的頂部,並且其他名稱按照字母順序排序。這是我目前在jsfiddle上的工作:http://jsfiddle.net/ADukg/3353/(沒什麼,我有點卡住了)。任何幫助?

回答

1

你去那裏:

myApp.filter('FirstAdminThenAlphabetic', function() { 
    return function (array, order) { 
     var comparator; 

     if (order === 'descending') { 
      comparator = function (elm1, elm2) {      
       return elm1.name < elm2.name; 
      } 
     } else { 
      comparator = function (elm1, elm2) {      
       return elm1.name > elm2.name; 
      } 
     } 

     return array.filter(function (elm) { 
      return elm.name === 'admin'; 
     }).concat(
      array.filter(function (elm) { 
       return elm.name !== 'admin'; 
      }).sort(comparator) 
     ); 

    }; 
}); 

你基本上過濾掉所有的管理員和排序該列表,它比串聯到你過濾掉任何東西,但管理員列表。我添加了升序或降序的功能。 jsfiddle

+0

太棒了。認真。 – iRaghu

+0

我在執行此操作時在我的機器上收到TypeErrors。這可能是因爲有兩種不同的名稱相同的過濾方法?一個來自角度,另一個基本上是一個array.filter()?任何幫助?或者替代方案是受歡迎的.. – iRaghu

+0

你能看到哪一行給出了類型錯誤嗎?你在使用其他庫嗎? jsfiddle是否適合你?你使用哪個瀏覽器? Array.filter僅支持從ie9開始。對於舊版瀏覽器,您可以在此頁面上使用墊片:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter – Jan

相關問題