在子指令中获取父指令控制器

时间:2014-11-25 10:05:04

标签: javascript angularjs angularjs-directive

我有以下指令:

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的控制器中获得该引用?

1 个答案:

答案 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
        }
    };
}]);

重要请注意,控制器功能将在 链接功能之前运行,因此您只能在异步回调中使用它。

在此之前,无法将父控制器的实例注入子控制器,因为它依赖于绑定到范围的指令,以便定义该层次结构。