angularjs ng-class方法被多次调用

时间:2013-04-11 14:51:34

标签: javascript angularjs

在这个例子中,我得到了2 ng-class,每个调用不同的控制器方法,由于某种原因,每个方法被调用3次,不知道吗?可能的错误?

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/

由于

1 个答案:

答案 0 :(得分:7)

这不是一个错误。当Angular编译类似ng-class="firstClass()"之类的东西时,它会为它设置$ watch。摘要循环可以多次评估每个$ watch:

  

Angular进入$ digest循环。循环由两个较小的循环组成,它们处理$ evalAsync队列和$ watch列表。 $ digest循环不断迭代,直到模型稳定,这意味着$ evalAsync队列为空,$ watch列表未检测到任何更改。 - Overview doc

另外

  

在观察者注册观察者之后,异步调用侦听器fn(通过$ evalAsync)来初始化观察者。在极少数情况下,这是不合需要的,因为当watchExpression的结果没有改变时会调用监听器。 - $watch docs

所以,预计至少会有两次。