0

我正在通过以下方式使用 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/(没什么,我有点卡住了)。有什么帮助吗?

4

1 回答 1

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

于 2013-07-06T11:36:58.147 回答