链接函数的第四个参数

时间:2015-04-11 00:00:32

标签: angularjs angularjs-directive

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

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

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

现在我决定让指令更灵活,可重复使用。所以,对于指令配置,我添加了

require: '?ngModel'

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

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

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

1 个答案:

答案 0 :(得分: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];
        }
    };
});

PLUNKER