Angular Directive正在加载多次

use*_*057 1 directive angularjs

这是Angular中的错误还是我遗漏了一些东西:

从指令的模板调用函数表明该函数执行了11次!用templateurl,22次!! 用字符串模板.

angular.module('testDirective', [])
        .directive('myDirective', function() {
          return {
            scope:{},
            template: '{{increment()}} {{count}}',
            controller: function($scope) {

              $scope.count = 0;

              $scope.increment = function() {
                $scope.count += 1;
              };
            }
          };
        })
Run Code Online (Sandbox Code Playgroud)

HTML:

<body ng-app="testDirective">
    <my-directive></my-directive>
</body>
Run Code Online (Sandbox Code Playgroud)

结果:

22
Run Code Online (Sandbox Code Playgroud)

这是一个包含template和templateUrl方法的Plunker.

例如,当在转发器中涉及方法调用时,这是一个非常严重的问题,这最终会在相同的方法上调用相同的方法.

有人可以对此有所了解吗?

Kev*_*ley 5

{{increment()}}在你的视图中,每次调用摘要周期时都会调用它,就像任何绑定表达式一样.如果您正在增加控制器函数本身,而不是从视图模板调用的绑定函数,则表明该指令多次"加载".但Angular的本质是任何绑定表达式都将在摘要周期中反复检查更改,并且您希望只发生一次(甚至可预测次数)的任何内容都不应该发生在绑定到内容的表达式中元件.另一方面,绑定到事件处理程序的表达式仅在事件触发时执行.

该模型需要一些时间来习惯.虽然旧文档反对它,但您可以在内容绑定表达式中使用函数,但它们永远不应更改状态.你无法真正控制何时调用$ digest(),如果你正在以Angular的方式思考,你将不会想要.