关于javascript:为什么在角度指令中多次调用ng-class?

Why ng-class is called several times in directive of angular?

本问题已经有最佳答案,请猛点这里访问。

我不知道为什么叫了好几次。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!doctype html>
<html ng-app="HelloApp">
<body>
  <test-directive></test-directive>
</body>
</html>

angular.module('HelloApp', [])
.directive('testDirective', function () {
    return {
        restrict: 'E',
        replacement: true,
        template: 'Test Directive',
        link : function (scope, element, attrs) {
            console.log('link');
            var cnt = 0;
            scope.test = function () {
                cnt += 1;
                console.log('test', cnt);
                //element.append('<h6>test' + cnt + '</h6>');
            }
        }
    }
});

控制台结果是

1
2
3
4
link
test 1
test 2
test 3

这里是jsFiddle:http://jsFiddle.net/yh9v5/打开链接并查看console.log


当一个摘要循环运行时,在AngularJS中使用的所有表达式都会被多次计算。这是为了进行脏检查,以验证表达式的当前值是否与最后一个值不同。

这意味着,如果在表达式中使用方法,则不能依赖于调用方法的次数。

请参阅"范围生命周期"一节了解它是如何发生的http://docs.angularjs.org/guide/scope


AngularJS编译DOM,这样它就可以创建div,并在幕后执行ng-class几次。无论如何,ng-class应该以另一种方式使用:http://docs.angularjs.org/api/ng.directive:ngclass