为什么指令模板中的角度表达式执行两次?

时间:2015-09-23 13:27:19

标签: angularjs angularjs-directive

这是一个简单的指令:

app.directive('ngFoo', function($parse){

  var controller = ['$scope', function ngNestCtrl($scope) {

    $scope.getCanShow = function() {
      console.log('show');
      return true;
    };

  }];

  var fnPostLink = function(scope, element, attrs) {
    console.log('postlink');
  };

  var fnPreLink = function(scope, element, attrs) {
    console.log('prelink');
  };

  var api = {
    template: '<div ng-if="getCanShow()">foo</div>',
    link: {
      post: fnPostLink,
      pre: fnPreLink
    },
    restrict: 'E',
    controller:controller
  };

  return api;

});

我的目标是找到&#34; show&#34;获得输出到控制台。在这一刻,我认为它发生在链接(pre&amp; post)之后。

这是有道理的。由于模板是在这些阶段之后呈现的。 (如果我错了,请纠正我)。

但话又说回来,为什么模板会被渲染两次?

http://plnkr.co/edit/JNhON2lY9El00dzdL39J?p=preview

1 个答案:

答案 0 :(得分:1)

Angular有多个摘要周期,你可以看到其中两个。这是完全正常的,完全可以。