Я пытаюсь сделать ng-repeat
над результатом функции вызова, какУгловой JS нг-повтор - трек с помощью динамического сбора
<body ng-init='a = [1, 2, 3]'>
<div ng-repeat='item in f(a) track by item[0]'>{{item}}</div>
</body>
где f
является
function f (arr) {
return arr.map(function (v) {
return [v]
})
}
Вот Plunker с этим кодом
Проблема в том, что в консоли мы видим ошибки, такие как 10 $digest() iterations reached. Aborting!
Это не из-за воссоздавая массива контейнеров, потому что если мы просто изменим line 3
как
return [v] -> return v
и удалить
track by item[0]
все работает. Это происходит из-за воссоздания предметов, и track by
должен справиться с этим. Но по какой-то причине он не :(
Я также пытался решить эту проблему без track by
купить положить постоянную $$hashKey
по каждому пункту (даже на самой коллекции). Вот Plunker с той же ошибкой. Надеюсь, что кто-нибудь может объяснить, почему это не работает
Таким образом, есть два отдельных вопроса: случай с track by
и случай с $$hashKey
BTW Да, я прочитал How to Loop through items returned by a function with ng-repeat? и AngularJS InfDig error (infinite loop) with ng-repeat function that returns array of objects более чем несколько раз, но не может найти ответ
Благодаря
Я провел некоторое расследование и нашел https://groups.google.com/forum/#!topic/angular/IEIQok-YkpU где люди обсуждают мою реальную проблему, упрощенную, с которой я получаю текущий вопрос. Решения, которые у них есть, а также мой второй (с манипуляцией '$$ hashKey') работают в старых угловых и не работают в современной версии. Я думаю, что тормоз пришел в 1.1.3 -> 1.1.4, только когда 'track by' вошел в Angular – Agat