2015-02-05 3 views
0

Основной идеи:гнезда нг-повтор генерирует гораздо больше деталей, чем ожидался

Я хочу объединить самозагрузки подвесной системы с угловой нг-повтором

Метод:

Я использовал фильтр, чтобы переформатировать данные JSon (массив с большим количеством объектов), как codepen проекта:

http://codepen.io/maggiben/pen/sfCnq `` ` фильтр ('listToMatrix', функция() { функция возврата listToMatrix (список, элементыPerSubArray) {

var matrix = [], i, k; 
    console.log("hellowrld") 
    for (i = 0, k = -1; i < list.length; i++) { 
     if (i % elementsPerSubArray === 0) { 
      k++; 
      matrix[k] = []; 
     } 

     matrix[k].push(list[i]); 
    } 

    return matrix; 
}; 

});

enter image description here

И вот мой нефрит код страницы:

enter image description here

Мой код контроллера: Для того, чтобы получить новости. enter image description here

Проблема в том, я получил гораздо больше элементов на странице: enter image description here

ответ

0

Эта ошибка означает, что угловой не удается закончить цикл дайджеста. Причина этого исходит из вашего фильтра: каждый раз, когда угловой применяет фильтр к вашему списку, создается новая матрица, поэтому угловой будет продолжать ссылаться на фильтр до тех пор, пока он не вернется, так же, как и предыдущая итерация (чего никогда не бывает).

Чтобы исправить это, вы можете отслеживать элементы своей матрицы с помощью ng-repeat ... track by items.someProperty, поэтому после того, как два последовательных звонка на ваш фильтр, угловые обнаружат, что этот someProperty не изменился и завершит цикл.

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

Для более подробной лекции вы можете обратиться к этому вопросу (та же проблема): Angular filter works but causes "10 $digest iterations reached"

+1

да, но почему codepen проектные работы? –

+0

проблема: результат неправильный. На странице слишком много предметов. –

+0

Вы столкнулись с проблемой XY, проблема в том, что я говорю, что приводит к неконтролируемому поведению. Обратите внимание, что более простым решением может быть сортировка ваших списков в контроллере один раз для всех, а затем удаление фильтра: вы также получите лучшие результаты. – floribon

Смежные вопросы