2017-02-07 6 views
0

https://plnkr.co/edit/WzLez5XElbOHRTvXEJFc?p=previewAngular.JS의 NG-반복 지시자는 겨 반복 만 2 번 실행되는 동안 지시문 PLC의 기능은 4 번 호출되고 두 번

 function DirectiveController($scope, $element) 
{ 
$scope.Array = ["a", "b"]; 
    $scope.me = function() { 
     console.log("i ran"); 
    }; 

}; 


//Directive HTML 
<div class="cool picker" ng-repeat="item in Array"> 
     <input ng-value="me()"> 
      {{item}} 
     </input> 
</div> 

실행됩니다. Plunker에서 제 코드 버전을 만들었습니다. "고립 된 범위를 없애면 도움이되지 않을 것"과 같은 제안이 있습니다.

+0

왜 처음에 ng 값의 함수를 호출하고 있습니까? –

답변

2

는 직장에서 digest cycle입니다. 다이제스트주기는 Angular’s 자동 업데이트 마법이 작동하는 방식입니다. 입력 상자에 입력하면 자동으로 값을 나타내는 모든 항목이 업데이트됩니다.

다이제스트주기가 실행되면 페이지에서 변경되었을 수있는 모든 항목이 효과적으로 다시 그립니다.

Angular는을 변경했을 수도있는 모든 것을 으로 찾는데 주된 기술은 watchers입니다. 이러한 관찰자는 ng-if 및 ng-class와 같은 명령어를 사용할 때 및 {{yourBindingHere}}와 같은 바인딩을 사용할 때 자동으로 생성됩니다.

이러한 것들은 각각 watcher을 등록합니다. Angular의 다이제스트주기가 실행되면 모든 감시자가 상태를 업데이트하라는 메시지가 표시됩니다. ng-class의 경우 변경해야 할 것이 있는지보기 위해 바인딩 된 함수를 다시 실행합니다. 이것이 컨트롤러 기능이 여러 번 실행되는 이유이며 페이지에서 변경 될 때마다 다시 실행됩니다.

이제는 보간 {{}}을 사용하고 있으므로 Angular가 한 번만 실행되고 ng-value 인 함수를 사용하면 다시 한 번 강제 실행됩니다.

항상 ng-repeat에서 함수를 사용하지 않는 것이 가장 좋습니다.주기가 강제로 주기적으로 업데이트를 확인하기 때문입니다.

마지막으로 을 사용하면 가능한 모든 감시자를 방지 할 수 있습니다.

+0

"이제는 보간법 {{}}을 사용하고 있으므로 Angular가 한 번 실행되고 ng-value가있는 함수를 사용하면 다시 한번 강제 실행됩니다." 내가 어떻게 바꿀지를 설명 할 수 있습니까? – tomersss2