angularJS自定义过滤器以提取特定值

时间:2013-07-06 10:28:43

标签: javascript html angularjs

我使用ng-repeat以下列方式打印出一个列表:

<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 个答案:

答案 0 :(得分: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