2013-04-11 14 views
8

In questo esempio, ho ottenuto 2 ng-class, ognuno chiamando un diverso metodo di controller, per qualche motivo ogni metodo viene chiamato 3 volte, Qualche idea? Possibile errore?il metodo angularjs ng-class viene richiamato più volte

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/

Grazie

+0

Se il tuo obiettivo è avere classi condizionali per le tue etichette, dai un'occhiata a questo post SO: http://stackoverflow.com/a/15664427/1036025 – jpmorin

risposta

7

Non è un bug. Quando Angular compila qualcosa come ng-class="firstClass()", imposta un $ watch per questo. Un loop digest può valutare ogni $ watch più volte:

Angolare entra nel ciclo $ digest. Il ciclo è composto da due loop più piccoli che elaborano la coda $ evalAsync e la lista di $ watch. Il ciclo $ digest continua a ripetere fino a quando il modello si stabilizza, il che significa che la coda $ evalAsync è vuota e l'elenco $ watch non rileva alcuna modifica. - Overview doc

anche

Dopo un osservatore è registrato con il campo di applicazione, il fn ascoltatore è chiamato in modo asincrono (tramite $ evalAsync) per inizializzare l'osservatore. In rari casi, ciò non è auspicabile perché il listener viene chiamato quando il risultato di watchExpression non cambia. - $watch docs

Quindi, sono previste almeno due volte.

Problemi correlati