2014-11-27 5 views
0

은 다음과 NG 반복 고려 (각도)를 실행합니다 :NG 반복 두 번

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

내가 10 개 항목 배열이있는 경우 이제 이상한 일이의 getName가 호출되는 20 회

Checkout this jsfiddle

누군가 이런 일이 일어나는 이유를 설명 할 수 있습니까? 성과 현명하다 이것은 살인일지도 모른다 (나는 상상할 수있다)

+0

터무니없는,하지만 그 이상입니다 ! – deitch

+0

죄송하지만 바이올린에 4 개의 항목이 있으며 getName은 4 번 호출됩니다. 맞습니까? – Christos

+0

아니요, 8 번 호출됩니다. 방금 해봤 어. "console.log"를 "alert"로 바꾸면 표시됩니다. – deitch

답변

3

이것은 각을위한 표준 행동 양식이다. Angular는 값에 대한 더러운 검사를 실행하고 값이 변경되지 않았는지 확인하기 위해 적어도 두 번 실행됩니다.

편집 : 컨트롤러에서이 이름을 매핑 제안 행동의이 종류를 방지하기 위해

, 이것은 각 항목에 대해 한 번 평가됩니다

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


<p ng-repeat="item in items"> 
    <span>{{item.name}}</span> 
</p>