programing

각도 스코프 기능이 여러 번 실행됨

css3 2023. 4. 5. 22:06

각도 스코프 기능이 여러 번 실행됨

범위에 함수를 정의했습니다.또, {{}}내의 뷰에서 호출하면, X회 실행됩니다.

컨트롤러

function testCtrl($scope) {
   $scope.myFunc = function(name) {
       return "Hello " + name;
   }
}

HTML

<div>{{myFunc('Joe')}}</div>

이 예에서는, http://jsfiddle.net/rbRvD/2/ 를 참조할 수 있습니다.

또는 Plunker: http://plnkr.co/edit/LLQ7cKs2fEoBwv0C5XPE

이건 잘못된 방법인 것 같은데, 왜 이렇게 자주 실행되는 거죠?

기능은 10회 실행됩니다.왜 10개죠?왜 100은 안 돼?

정답은 다음 문서에 있습니다.

워치 리스너에 의해 모델이 변경되어 다른 리스너가 기동할 가능성이 있습니다.이것은 변경이 검출되지 않을 때까지 워처를 재실행함으로써 실현됩니다.무한 루프 교착 상태를 방지하기 위해 재실행 반복 제한은 10입니다.

이러한 현상이 발생하는 것은 Angular가 다이제스트를 다시 실행하고 시계를 다시 작동하도록 모델을 변경하고 있음을 의미합니다.특정의 경우, 카운터를 갱신하는 함수를 호출하고 있습니다.이것은 페이지에 표시됩니다).카운터 값이 변경되면 다이제스트가 다시 실행됩니다.이 다이제스트는 카운터를 갱신하는 함수 등을 호출합니다.

Angular는 사용자가 모형을 변경하고 뷰가 이러한 변경에 반응할 수 있도록 해주기를 기대합니다.

이것은 예상되는 동작입니다.각도 표현({{expression}})는 각 $subloop(루프마다 여러 번)으로 재연결됩니다.즉, 계산상 표현은 경쾌하게 유지되어야 합니다.

그 때문에, 식평가에 의해서, AJAX 콜이나 그 외의 부하가 높은 조작이나 비동기 조작은 행해지지 않습니다.또, 필요한 경우는, 그 결과를 캐싱 할 필요가 있습니다.

AngularJs는 렌더링 시 스코프의 모델을 변경할 것을 권장하지 않습니다.스코프의 모델을 변경하려면 Controller 또는 Directive에서 변경합니다.

뷰는 데이터(이 경우 범위 값)만을 표시하는 위치라고 생각하십시오. 데이터의 수정은 모두 컨트롤러 또는 지침에 있어야 합니다.

언급URL : https://stackoverflow.com/questions/17164230/angular-scope-function-executed-multiple-times