链接函数的第四个参数

Eug*_*ene 7 angularjs angularjs-directive

我有一个由另一个开发人员编写的指令,基本上有以下配置:

{
    controller: MyController,
    controllerAs: 'myController',
    link: function(scope, $element, attrs, ctrl) {
        // Does some setup that requires controller
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,控制器作为第四个参数传递,指令工作.

现在我决定使指令更灵活,可重用和更好.所以,我添加了指令配置

require: '?ngModel'
Run Code Online (Sandbox Code Playgroud)

突然,现在我的控制器永远不会传递给链接功能.第四个参数没有数组,没有第五个参数,nada.

我尝试将控制器添加到require指令 - 但它仍然找不到它.

如何添加require和传递控制器?

Mos*_*sho 8

require表示您需要的指令(ngModelController在本例中)将其控制器作为链接函数的第四个参数发送.默认控制器是指令,其链接函数被调用,控制器但需要另一个指令覆盖它(即使它是一个可选的要求并且不存在所需的指令,在这种情况下第四个参数将是undefined).幸运的是,require可以是一个指令数组,所以这将工作:

module.directive('myDirective', function() {
    return {
        controller: MyController,
        controllerAs: 'myController',
        require: ['myDirective', '?ngModel'],
        link: function(scope, $element, attrs, controllers) {
            var MyDirectiveController = controllers[0]; //this directive's controller 
            var ngModelController = controllers[1];
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

PLUNKER