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 に答える