访问指令的所有控制器

时间:2015-08-29 09:44:05

标签: javascript angularjs

我有一个指令需要两个控制器,并且另一个控制器使用controller属性TreeNodeController指定。

.directive('uiTreeNode', function () {
    return {
      require: ['^uiTreeNodes', '^uiTree'],
      controller: 'TreeNodeController',
      link: function (scope, element, attrs, controllers) { ... }
    };
  });

我的问题是如何从TreeNodeController方法访问link

当我记录controllers参数时,它是一个仅包含uiTreeNodesuiTree控制器的数组。

1 个答案:

答案 0 :(得分:1)

如果您需要访问指令的控制器,您也必须要求它。在require数组中使用指令名称(不是控制器名称)。

.directive('uiTreeNode', function () {
    return {
       require: ['^uiTreeNodes', '^uiTree', 'uiTreeNode'],
       controller: 'TreeNodeController',
       link: function (scope, element, attrs, controllers) { 
          var treeNodeCtrl = controllers[2];
       }
    };
 });

如果您使用controllerAs语法,则控制器也在范围内:

.directive('uiTreeNode', function () {
    return {
        require: ['^uiTreeNodes', '^uiTree'],
        controller: 'TreeNodeController',
        controllerAs: 'view',
        link: function (scope, element, attrs, controllers) { 
          var treeNodeCtrl = scope.view;
        }
};