Angularjs的ng-class方法被多次调用

angularjs ng-class method is getting invoked multiple times

本文关键字:调用 方法 ng-class Angularjs      更新时间:2023-09-26

在这个例子中,我有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/

谢谢

这不是一个bug。当Angular编译像ng-class="firstClass()"这样的东西时,它会为它设置一个$watch。摘要循环可以对每个$watch求值多次:

Angular进入$digest循环。该循环由两个较小的循环组成,分别处理$evalAsync队列和$watch列表。$digest循环继续迭代,直到模型稳定,这意味着$evalAsync队列为空,$watch列表没有检测到任何变化。——概述文档

在监听器注册到作用域后,监听器fn被异步调用(通过$evalAsync)来初始化监听器。在极少数情况下,这是不希望看到的,因为侦听器是在watchExpression的结果没有改变时调用的。——$watch docs

所以,至少需要两次