2017-11-09 1 views
0

Ich bin mit einem seltsamen Problem in Angular 1 konfrontiert, die das Skript in Endlosschleife geht und schließlich der Browser hängt. Hier

ist, was ich versuche

<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> 

Also im Grunde tun möchte ich zuerst div verstecken, nachdem die Taste gedrückt wird. Ich weiß, ich kann es in "updateB" -Funktion tun. Aber nein, ich möchte das in "D" machen, nachdem der Ausdruck ausgewertet wurde. Es geht in eine Endlosschleife.

Kann mir jemand vorschlagen, was hier schief läuft?

+0

@estus Wenn ich B aktualisieren, wird der Ausdruck ausgewertet und D() wieder und schließlich $ scope.A = false aufgerufen werden . Was ist das Problem in diesem Fluss? –

+0

Ich denke, das ist das richtige Verhalten. D() wird in jedem Winkelzyklus aufgerufen. Wenn Sie ein oder mehrere Elemente in B haben, wird Ihre Funktion D() aufgerufen. –

+0

Ja, ich verstehe, D wird mehrmals aufgerufen (bis zu Länge von B), aber nicht in Endlosschleife. Das heißt, selbst wenn es nur ein Element in B gibt, wird D wiederholt aufgerufen. –

Antwort

1

Dies passiert, weil Ihre Funktion D() bei jedem eckigen Digest-Zyklus ausgeführt wird. Selbst wenn Sie nur ein Element in B haben. Wenn Sie keine Elemente auf B haben, wird Ihre Funktion nicht ausgeführt.

Dies kann Ihnen helfen, zu verstehen, wie Zyklus verdauen funktioniert: The Digest Loop and $apply und Understanding the Digest Cycle

Verwandte Themen