我有以下指令:
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;
....
....
}
};
}]);
在链接函数中,我获得$ controller依赖项,该依赖项包含对parentDirective控制器的引用。如何在childDirective的控制器中获得该引用?
答案 0 :(得分: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
}
};
}]);
重要请注意,控制器功能将在 链接功能之前运行,因此您只能在异步回调中使用它。
在此之前,无法将父控制器的实例注入子控制器,因为它依赖于绑定到范围的指令,以便定义该层次结构。