2017-05-27 77 views
2

我有這段代碼。從邏輯上講,這應該進入無限的渲染循環。但它保持穩定,輸出結果是ab都被打印在一起。爲什麼這不會造成無限循環?

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

這不是我工作的任何東西的一部分。它只是在我的腦海裏出現,我無法在任何地方找到答案。

編輯

我明白,在我上面的例子@dfsq指出,ng-if創建一個新的範圍。所以我在this example中改了一下代碼。所以這裏兩個ng-if都應該指向同一個對象。爲什麼這裏沒有進入循環?

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-如果創建一個新的範圍,所以他們不是指到同一個實例 –

回答

3

按道理這應該進入無限循環渲染。

不,不應該。 ngIf指令創建新的子範圍,並因此ngInit修改(創建)獨立標誌,該標誌不會影響ngIf中使用的標誌(父範圍hello)。

+0

謝謝。我用一個codepen鏈接更新了我的問題。爲什麼它仍然穩定? – Anubhav

0

由於@dfsq mencioned,NG-如果創建一個新的範圍,如果你想創建你應該使用類似一個無限循環:

<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> 
相關問題