如何从子控制器调用父指令控制器(不是链接方法)

时间:2014-08-01 08:14:34

标签: angularjs angularjs-directive angularjs-scope

我想从我的孩子那里访问我的父指令。

我知道如果你使用require属性,那么link方法将父控制器作为参数传递,但是如何从我的childs控制器方法中访问这个控制器。

这是一个基本示例的插件

http://plnkr.co/edit/wVSurxx7GsRw1EtVdOP1

// how can i call this init function??
this.init = function(elem, parentCtrl) {
    $scope.$element = elem;
    parentController = parentCtrl;
}

如图所示,我希望能够调用myChildController init()函数...

提前致谢

1 个答案:

答案 0 :(得分:1)

孩子的链接功能将需要控制器,它自己和它的父母。子控制器可以有setParent()方法,用于设置父控制器。演示:

app.directive("child", function() {
    return {
        ...
        require: ["^parent", "child"],
        link: function(scope, elem, attrs, ctrls) {
            var parentController = ctrls[0],
                childController = ctrls[1];

            childController.setParent(parentController);
        },
        controller: ["$scope", function($scope) {
            var parentController;

            this.setParent = function(parent) {
                parentController = parent;
            };

            // use parentController...
        }]
    };
});

无论如何,require和链接功能都是可行的方法。