Angular - 在child指令的控制器中获取父指令的控制器(不是链接函数)

Dmi*_*try 7 angularjs angularjs-directive angularjs-controller

我知道如何directive在子指令的link函数中获取父控制器.
但是,我宁愿避免使用link函数(和$scope所有在一起),并controller在指令的功能下拥有我的所有代码.

angular.directive('parent', function(){
    return {
        templateUrl: '/parent.html',
        scope: true,
        bindToController: true,
        controllerAs: 'parentCtrl',
        controller: function(){
            this.coolFunction = function(){
                console.log('cool');
            }
        }
    }
});

angular.directive('child', function(){
    return {
        templateUrl: '/child.html',
        require: '^parent',
        scope: true,
        bindToController: true,
        controllerAs: 'childCtrl',
        controller: function() {
            // I want to run coolFunction here.
            // How do I do it?
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

Fra*_*rds 1

您可以将“$element”注入控制器并访问父控制器,例如 -

  controller: ($element) ->
    var parentCtrl = $element.parent().controller('parent');
    parentCtrl.coolFunction();
    //..........
    //..........
Run Code Online (Sandbox Code Playgroud)

这可能不是访问“任何”父控制器的最透明的方式,因为它需要指令的特定名称,并且它是 jqlite 而不是纯 Angular。

发现此线程有用 -如何通过递归要求访问父指令的控制器?

编辑:感谢@Dmitry 弄清楚 Angular 不需要“.parent”来获取控制器。更新的代码 -

  controller: ($element) ->
    var parentCtrl = $element.controller('parent');
    parentCtrl.coolFunction();
    //..........
Run Code Online (Sandbox Code Playgroud)