Вопрос:

ng-repeat работает дважды (угловой)

javascript angularjs ng-repeat

3114 просмотра

1 ответ

8256 Репутация автора

Рассмотрим следующее ng-repeat:

<p ng-repeat="item in items">
    <span ng-bind="getName(item)"></span>
</p>

Теперь странно то, что если у меня есть массив с 10 элементами, getName вызывается 20 раз

Оформить заказ jsfiddle

Может кто-нибудь объяснить, почему это происходит. По производительности это может быть убийством (я могу представить)

Автор: Jeanluca Scaljeri Источник Размещён: 27.11.2014 08:16

Ответы (1)


3 плюса

16793 Репутация автора

Решение

Это стандартное поведение для угловых. Angular запускает грязную проверку значений и запускается как минимум дважды, чтобы убедиться, что значение не изменилось.

РЕДАКТИРОВАТЬ:

Чтобы избежать такого поведения, я бы предложил отобразить это имя в контроллере, оно будет оцениваться только один раз для каждого элемента:

function MyCtrl($scope) {
    ...
    $scope.items.forEach(function(item) {
        item.name = getName(item);
    });
    ...
});


<p ng-repeat="item in items">
     <span>{{item.name}}</span>
</p>
Автор: Vadim Размещён: 27.11.2014 08:28
Вопросы из категории :
32x32