哪个函数将首先在angularjs指令中执行?链接或控制器?

时间:2016-12-15 10:37:20

标签: angularjs angularjs-directive

我已经浏览了这个链接https://www.undefinednull.com/2014/07/07/practical-guide-to-prelink-postlink-and-controller-methods-of-angular-directives/,他们说链接和控制器执行的顺序(从头到尾)是

  1. 控制器,
  2. 预链接功能,
  3. 后链接功能
  4. 但是在这里我读到AngularJS: What is the need of the directive's link function when we already had directive's controller with scope?链接在控制器之前执行。我应该相信哪一个?

1 个答案:

答案 0 :(得分:2)

如果它是link,那么controller就不可能require其他指令,并在link函数中使用他们的控制器。

查看documentation中的代码:

var directiveDefinitionObject = {
    controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
    controllerAs: 'stringIdentifier',
    require: 'siblingDirectiveName', // requiring another directive       
    compile: function compile(tElement, tAttrs, transclude) {
      return {
         pre: function preLink(scope, iElement, iAttrs, controller) { ... }, //siblingDirectiveName's controller is available in link function 
         post: function postLink(scope, iElement, iAttrs, controller) { ... }
      }          
    },
  };
  return directiveDefinitionObject;
});

为了支持这个陈述,我们可以阅读同一页面:

  

控制器

     

控制器构造函数。控制器在之前预链接阶段实例化,并且可以被其他指令访问(请参阅require属性)。这允许指令彼此通信并增强彼此的行为。