2017-05-27 12 views
2

Ich habe dieses Stück Code. Logischerweise sollte dies in eine unendliche Rendering-Schleife gehen. Aber es bleibt stabil und die Ausgabe ist, dass a und b, beide zusammen gedruckt werden.Warum verursacht das keine Endlosschleife?

<div ng-if='hello'> 
    <span ng-init='hello=false'>a</span> 
</div> 
<div ng-if='!hello'> 
    <span ng-init='hello=true'>b</span> 
</div> 

Dies ist nicht Teil von irgendetwas, an dem ich arbeite. Es tauchte einfach in meinem Kopf auf und ich konnte nirgendwo eine Antwort finden.

bearbeiten

Ich verstehe, dass als @dfsq in meinem obigen Beispiel darauf hingewiesen, schafft ng-if einen neuen Bereich. Also habe ich den Code ein bisschen geändert in this example. Also sollten sich beide ng-if s auf dasselbe Objekt beziehen. Warum geht es hier nicht in eine Schleife?

HTML

<div ng-app='app'> 
    <div ng-controller='appCtrl'> 
    <div ng-if='object.hello'> 
     <span ng-init='object.hello=false'>a</span> 
    </div> 
    <div ng-if='!object.hello'> 
     <span ng-init='object.hello=true'>b</span> 
    </div> 
    </div> 
</div> 

JS

(function() { 
    var app = angular.module("app", []); 

    app.controller("appCtrl", [ 
    "$scope", 
    function($scope) { 
     $scope.object = {}; 
     $scope.object.hello = true; 
    } 
    ]); 
})(); 
+1

ng-wenn erstellt einen neuen Rahmen, so dass sie nicht mit Bezug zu derselben Instanz –

Antwort

3

sollte Logischer in eine unendliche Schleife machen gehen.

Nein, sollte es nicht. ngIf Direktive erstellt neuen untergeordneten Bereich, und daher ngInit ändert (erstellt) unabhängige Flag, die nicht die in ngIf (übergeordneten Bereich hello) verwendet beeinflusst.

+0

Danke. Ich habe meine Frage mit einem Code-Link aktualisiert. Warum ist es immer noch stabil? – Anubhav

0

Als @dfsq mencioned, ng-wenn Sie einen neuen Bereich erstellt, wenn Sie eine Endlosschleife erstellen möchten Sie so etwas wie verwenden sollten:

<div ng-if='hello'> 
    <span ng-init='$parent.hello=false'>a</span> 
</div> 
<div ng-if='!hello'> 
    <span ng-init='$parent.hello=true'>b</span> 
</div> 
Verwandte Themen