在这个例子中,我得到了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' ;
};
}]);
由于
答案 0 :(得分:7)
这不是一个错误。当Angular编译类似ng-class="firstClass()"
之类的东西时,它会为它设置$ watch。摘要循环可以多次评估每个$ watch:
Angular进入$ digest循环。循环由两个较小的循环组成,它们处理$ evalAsync队列和$ watch列表。 $ digest循环不断迭代,直到模型稳定,这意味着$ evalAsync队列为空,$ watch列表未检测到任何更改。 - Overview doc
另外
在观察者注册观察者之后,异步调用侦听器fn(通过$ evalAsync)来初始化观察者。在极少数情况下,这是不合需要的,因为当watchExpression的结果没有改变时会调用监听器。 - $watch docs
所以,预计至少会有两次。