需要指令控制器以及其他所需的控制器

时间:2015-03-29 20:02:04

标签: javascript angularjs angularjs-directive

我有一对指令,一个存在于另一个指令中,需要使用require: '^parentTag'。这两个指令还声明了自己的控制器。在父指令内部,我可以访问其控制器作为link: function(scope, el, attrs, ctrl)的第四个参数,但在子节点中,第四个参数是所需的控制器或所需控制器的数组,并且指令控制器不再可访问。

我试图要求控制器使用controllerAs 'vm'中使用的名称,并使用控制器的字符串名称。也没有让控制器回到第四个参数。

可以从作为scope.vm的范围访问控制器,但如果可能的话,我想通过第四个参数访问它。

这个Plunkr显示ChildController不在第四个参数中,只在范围内,但ParentController可以作为第四个参数访问。

http://plnkr.co/edit/2WmB6Bqgc8MEG9JWz4wt

1 个答案:

答案 0 :(得分:1)

您可以通过其名称要求相同的指令(从未见过任何人实际执行此操作):

function ChildTag() {
  return {
    restrict: 'AE',
    require: ['^parentTag', 'childTag'],
    scope: {},
    template: '<div class="child-tag">Child</div>',
    link: link,
    controller: ChildController,
    controllerAs: 'vm',
    bindToController: true
  }

  function link(scope, element, attrs, ctrls, transclude) {
      // ctrls[1] is ChildController
      console.log('Child vm not found in ctrls', ctrls);
      console.log('Child vm found on scope', scope.vm);
  }
}