Ошибка бесконечного дайджеста при фильтрации массива объектов

У меня есть массив объектов следующим образом:

$scope.arr = [
    {'val': true},
    {'val': false},
    {'val': false},
    {'val': true},
    {'val': false},
]

Я использую ng-repeat с фильтром, который сортирует массив на основе ключа «val» и помещает объекты с «val», установленным в true, перед другими объектами. Вот фильтр:

app.filter('ownerFirst', [function() {
    return function(list) {
        list.sort(function(a, b) {
            return a['val'] - b['val'];
        })
        return list;
    }
}])

шаблон:

<div ng-repeat="obj in arr | ownerFirst">

Но я получаю ошибка бесконечного дайджеста. Почему это происходит?


person Tarun Dugar    schedule 20.11.2015    source источник
comment
попробуйте этот ‹div ng-repeat=obj в дорожке arr по $index| владелецПервый›   -  person ngLover    schedule 20.11.2015
comment
Если я это сделаю, мне придется передать arr в качестве параметра фильтру «ownerFirst». Тем не менее, позвольте мне попробовать...   -  person Tarun Dugar    schedule 20.11.2015
comment
Вы сортируете массив на каждой итерации. Попробуйте отсортировать массив перед вызовом ng-repeat.   -  person R3tep    schedule 20.11.2015
comment
Я могу это сделать, но я спрашиваю, почему я получаю ошибку в этом случае?   -  person Tarun Dugar    schedule 20.11.2015


Ответы (1)


Я не думаю, что вам нужен собственный фильтр, попробуйте использовать orderBy следующим образом:

<div ng-repeat="obj in arr | orderBy: '-val'">    

Вам нужно поставить знак - перед val, потому что вам нужна сортировка по убыванию.

person huysentruitw    schedule 20.11.2015
comment
Спасибо. Является ли "-" непосредственно перед val для обратной сортировки? - person Tarun Dugar; 20.11.2015