angularjs ng-class方法被多次调用

Phi*_*guy 8 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' ;
    };     

}]);
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Mar*_*cok 7

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

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

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

所以,预计至少两次.