2013-04-11 12 views
8

In diesem Beispiel habe ich 2 ng-Klasse, jeder Aufruf andere Controller-Methode, aus irgendeinem Grund wird jede Methode 3 mal aufgerufen, Irgendeine Idee? Möglicher Fehler?angularjs ng-class-Methode wird mehrmals aufgerufen

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/

Dank

+0

Wenn Ihr Ziel ist, bedingte Klassen für Ihre Labels zu haben, schauen Sie sich diesen SO-Beitrag an: http://Stackoverflow.com/a/15664427/1036025 – jpmorin

Antwort

7

Es ist kein Fehler. Wenn Angular etwas wie ng-class="firstClass()" kompiliert, richtet es eine $ Uhr dafür ein. Eine Digest-Schleife kann jeden $ Watch mehrere Male auswerten:

Angular tritt in die $ Digest-Schleife ein. Die Schleife besteht aus zwei kleineren Schleifen, die die $ evalAsync-Warteschlange und die $ watch-Liste verarbeiten. Die $ digest-Schleife iteriert solange, bis sich das Modell stabilisiert hat, was bedeutet, dass die $ evalAsync-Warteschlange leer ist und die $ watch-Liste keine Änderungen erkennt. - Overview doc

Auch

Nachdem ein Beobachter mit dem Bereich registriert ist, wird der Hörer fn genannt asynchron (über $ evalAsync), um die Beobachter zu initialisieren. In seltenen Fällen ist dies unerwünscht, da der Listener aufgerufen wird, wenn sich das Ergebnis von watchExpression nicht geändert hat. - $watch docs

So wird mindestens zwei mal erwartet.

Verwandte Themen