2014-05-13 4 views
0

ngRepeat를 사용하여 목록의 항목을 표시합니다. 문서에서 권장하는대로 ngInit을 사용하여 $ index 변수를 루프 내부에서 참조하는 "itemIndex"변수에 할당합니다. 모든 항목은 목록에서 제거 할 수있는 단추와 함께 표시됩니다. Here는 예 jsfiddle입니다 : AngularJS : ngRepeat 및 ngInit을 사용하여 목록에서 항목 제거

<li ng-repeat="item in list" ng-init="itemIndex = $index"> {{itemIndex}} {{item}} <a href="#" ng-click="removeItem(itemIndex)">remove</a></li> 

내가 항목을 제거하려고하면

에서, itemIndex라는 변수가 업데이트되지 않으므로 이후의 제거는 실패합니다.

<li ng-repeat="item in list">{{$index}} - {{item}} <a href="#" ng-click="removeItem($index)">remove</a></li> 

이 버그인가 아니면 의도 된 동작입니다 : 내가 $ 인덱스 변수를 사용하는 경우 대신, 예상대로 모든 (here이 같은 예는 ngInit 에드 변수없이) 작동?

답변

2

이 동작은 의도적으로 ng-init가 의도적으로 한 번만 실행됩니다.

당신이 ngInit 지시어를 보면, (https://github.com/angular/angular.js/blob/master/src/ng/directive/ngInit.js)는 겨-초기화를 전달 스크립트의 $eval uation가 compile 기능을 대신 link 기능에서 수행되는 것을 볼 수 있습니다. 링크 지시어가 요소/문서에 link 에드 때마다 실행되는 반면

var ngInitDirective = ngDirective({ 
    priority: 450, 
    compile: function() { 
    return { 
     pre: function(scope, element, attrs) { 
     scope.$eval(attrs.ngInit); 
     } 
    }; 
    } 
}); 

컴파일은, 응용 프로그램의 일생에 한 번만 실행됩니다.