2017-11-09 4 views
0

각도가 1 인 이상한 문제가 발생하여 스크립트가 무한 루프이되어 결국 브라우저가 중단됩니다. 여기

내가 그래서 기본적으로 나는 버튼을 누른 후 최초의 사업부를 숨길

<script> 
    $scope.A = true; 
    $scope.B = [{blah},{blah}]; 
    $scope.updateB = function(){ 
     $scope.B.push({blah}); 
    } 
    $scope.D = function(key){ 
     $scope.A = false; 
     return key.name; 
    } 
</script> 

    <div ng-if="A"> 
     <button ng-click="updateB()"></button> 
    </div> 

    <div ng-repeat="key in B"> 
     {{D(key)}} 
    </div> 

을하려고 것입니다. 나는 "updateB"함수에서 그것을 할 수 있다는 것을 알고있다. 하지만 아니, 표현을 평가 한 후에 "D"에서 그걸하고 싶습니다. 그것은 무한 루프로 진행됩니다.

아무도 나에게 무슨 문제가 있는지 알려줄 수 있습니까?

+0

@estus을 내가 B를 업데이트하면 표현식이 평가되고 D는()를 다시 호출하고 궁극적으로 $ scope.A = 거짓됩니다 . 이 흐름의 문제점은 무엇입니까? –

+0

이것이 올바른 행동이라고 생각합니다. D()는 모든 각도 사이클마다 호출됩니다. B에 하나 이상의 요소가 있으면 함수 D()가 호출됩니다. –

+0

그래, 나는 D가 여러 번 (길이가 B까지) 호출되지만, 무한 루프가 아니라는 것을 이해한다. 즉, B에 하나의 요소 만 있더라도 D가 반복적으로 호출됩니다. –

답변

1

이것은 모든 각도 다이제스트주기에 D() 함수가 실행되기 때문에 발생합니다. B에 하나의 요소 만있는 경우에도 B에 요소가 없으면 함수가 실행되지 않습니다.

이것은 당신이주기를 소화하는 방법을 이해하는 데 도움이 될 수 있습니다 작동 : The Digest Loop and $applyUnderstanding the Digest Cycle