2017-05-27 78 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> 
相关问题