2013-07-06 46 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

相关问题