2013-04-11 17 views
8

この例では、2 ng-classを取得しています。それぞれ異なるコントローラメソッドを呼びます。何らかの理由で各メソッドが3回呼び出されます。考えられるバグ?angularjs ng-classメソッドが複数回呼び出されています

var navList = angular.module('navList', []); 

navList.controller('navCtrl', ['$scope', '$location', function ($scope, $location) { 
    $scope.firstClass = function() { 
     console.log('firstClass'); 
     return 'label label-success' ; 
    };  
    $scope.secondClass = function() { 
     console.log('secondClass'); 
     return 'label' ; 
    };  

}]); 

http://jsfiddle.net/uDPHL/72/

おかげ

+0

ラベルの条件付きクラスを使用することを目標とする場合は、このSOの投稿をご覧ください:http://stackoverflow.com/a/15664427/1036025 – jpmorin

答えて

7

それはバグではありません。 Angularがng-class="firstClass()"のようなものをコンパイルすると、$ watchを設定します。ダイジェストループは$ watchを複数回評価します:

角度は$ digestループに入ります。ループは、$ evalAsyncキューと$ watchリストを処理する2つの小さなループで構成されています。 $ digestループは、モデルが安定するまで反復し続けます。つまり、$ evalAsyncキューは空であり、$ watchリストは変更を検出しません。 - ウォッチャーがスコープに登録されてOverview doc

また

後、リスナーFNは、ウォッチャーを初期化する($ evalAsyncを介して)非同期的に呼ばれます。まれに、watchExpressionの結果が変更されなかった場合にリスナーが呼び出されるため、これは望ましくありません。 - $watch docs

したがって、少なくとも2回予想されます。

関連する問題