2017-11-09 17 views
0

角度が1の奇妙な問題が起きて、スクリプトがの無限ループに入り、最終的にブラウザがハングします。ここで

は私が基本的に私はボタンが押された後の最初のdivを非表示にする

<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() 。このフローの問題は何ですか? –

+0

これは正しい動作だと思います。 D()は角周期ごとに呼び出されます。 Bに1つ以上の要素がある場合、関数D()が呼び出されます。 –

+0

ええ、私はDが(長さBまで)複数回呼び出されますが、無限ループでは呼び出されないことを理解しています。つまり、Bに要素が1つしかない場合でも、Dが繰り返し呼び出されます。 –

答えて

1

これは、関数D()が角度ダイジェストサイクルごとに実行されるためです。 Bに要素が1つしかありません。 Bに要素がない場合、関数は実行されません。

これは、あなたがどのように消化サイクルの動作を理解するのを助けることができる:再び呼び出され、最終的に$ scope.A = falseをされ The Digest Loop and $applyUnderstanding the Digest Cycle

関連する問題