link 函数的第 4 个参数

4th argument to the link function

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

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

这很好用,控制器作为第四个参数传递,指令有效。

现在我决定让指令更加灵活、可重用等等。所以,我在指令配置中添加了

require: '?ngModel'

突然,现在我的控制器从未传递给 link 函数。第四个参数没有数组,没有第五个参数,nada。

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

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

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

PLUNKER