angularjs - Angular 指令正在加载多次

标签 angularjs directive

这是 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;
              };
            }
          };
        })

HTML:

<body ng-app="testDirective">
    <my-directive></my-directive>
</body>

结果:

22

Here is a Plunker使用 template 和 templateUrl 方法。

例如,当方法调用涉及到转发器时,这是一个相当大的问题,这最终导致调用相同方法的时间大大超过应有的时间。

任何人都可以阐明这一点吗?

最佳答案

{{increment()}} 在您的 View 中将在每次调用摘要循环时被调用,就像任何绑定(bind)表达式一样。如果您在 Controller 函数本身而不是从 View 模板调用的绑定(bind)函数中递增,则表明指令正在“加载”多次。但是 Angular 的本质是,任何绑定(bind)的表达式都会在摘要周期中反复检查变化,任何你期望只发生一次(甚至可预测的次数)的事情都不应该在绑定(bind)到内容的表达式中发生元素。另一方面,绑定(bind)到事件处理程序的表达式仅在事件触发时执行。

该模型需要一些时间来适应。虽然旧文档反对它,但您可以在内容绑定(bind)表达式中使用函数,但它们永远不应该改变状态。您无法真正控制何时调用 $digest(),如果您是 thinking in the Angular way ,你不会想要的。

关于angularjs - Angular 指令正在加载多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30622983/

相关文章:

javascript - 当动画 div 跨越坐标时随机重新放置一个 div 元素

javascript - 在 AngularJs 中将第一个空输入集中在 html 表单中

wpf - "are you missing a using directive or an assembly reference?"但命名空间和引用是正确的

javascript - 无法解决 index.html 中的错误

javascript - 如何使用 AngularJS 通过单选按钮过滤 json 数据?

javascript - 在我的案例中如何解决我的 promise 电话

c# - 可以创建自定义 ASP.NET(不是 MVC)指令吗?

css - 如何将指令范围值绑定(bind)到angularjs中的模板

javascript - AngularJS 指令 : template with scope value (ng-bind-html)

angularjs - 在 Azure Service Fabric Web Api 中启用 CORS