Перемешать массив объектов в angularJS - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть массив объектов в моем пользовательском фильтре angularJS.Массив объекта имеет выделенный ключ со свойством boolen true и false.Я получаю объект со всеми показанными истинными значениями.Теперь я хочу перетасовать избранные истинные данные объекта.Но, к сожалению, это дает мне дайджест бесконечной ошибки.

Мой код:

   app.filter('sortFilter', ['$filter', function ($filter) {
   return function (items, sort) {
      var onlyFeatured = [];
            angular.forEach(items, function (item, key) {
                if(item['featured'] == true) {
                    onlyFeatured.push(items[key]);
                } 
            });
            onlyFeatured.sort(function() { return 0.5 - Math.random(); 
            });
            return onlyFeatured; 
       };
});

Пожалуйста, помогите избавиться от ошибки дайджеста.

1 Ответ

0 голосов
/ 27 сентября 2018

Основная причина: ваш фильтр возвращает новый массив в каждом цикле дайджеста.И angularjs выполняет грязную проверку для каждого наблюдаемого значения.Поскольку он получает новый массив, он снова запускает дайджест.И получает еще один массив.И ... это происходит некоторое время_представляется_типически_10 раз, а затем происходит сбой.

Так что невозможно реализовать рандомизатор в качестве фильтра angularjs.

Вместо этого вам нужно перетасовать его один раз где-нибудь в вашем компоненте ипривести результат к $scope или переменной this контроллера

[UPD] Я ошибся в том, что .sort не изменяет исходный массив.Это, извините за дезинформацию.Но все равно это не поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...