2014-11-25 74 views
1

我有以下指令:获取父指令控制器子指令

angular.module('test').directive('childDirective', [function() { 
    return { 
     restrict: 'E', 
     require: '^parentDirective', 
     controller: function() { 
      // How do I get parentDirective's controller? 
     }, 
     link: function($scope, $element, $attrs, $controller) { 
      var data = $controller.parentDirectiveData; 
      .... 
      .... 
     } 
    }; 
}]); 

在链接功能我得到保存到parentDirective的控制器参考$控制器的依赖。我如何在childDirective的控制器中获得该参考?

回答

2

你有几个选项,你可以把它的范围,或者其存储在一个变量,该控制器还可以访问:

angular.module('test').directive('childDirective', [function() { 

    var parentCtrl; 

    return { 
     restrict: 'E', 
     require: '^parentDirective', 
     controller: function() { 
      // parentCtrl will be defined after the link function runs. 
     }, 
     link: function($scope, $element, $attrs, $controller) { 
      var data = $controller.parentDirectiveData; 
      parentCtrl = $controller 
     } 
    }; 
}]); 

重要请注意控制功能之前运行链接功能,让你真的只能使用在异步回调。

没有办法注入母公司的控制的情况下进入此之前,孩子控制器,因为它依赖于指令被绑定到的范围,以便进行定义的层次结构。

+0

我正在寻找一个“官方”的答案,但是这似乎是一个解决办法。 – Naor 2014-11-25 10:18:26

+3

请注意最后一段。控制器就像任何其他控制器一样,使用角度的依赖注入将注入引用注入到其中。喷油器如何知道注入的母指令的控制器的情况下(记得有每个指令实例之一),如果你还没有束缚孩子指令的范围,但(发生在连接功能,并定义了**的**指令的父项)。换句话说,官方的答案是“做指令来指导链接功能中的通信”。 – 2014-11-25 10:58:20

+0

明白了。事情是,我与controllerAs语法的工作,并没有linkAs ... – Naor 2014-11-25 11:56:18