我有另一个开发人员编写的指令,基本上有以下配置:
{
controller: MyController,
controllerAs: 'myController',
link: function(scope, $element, attrs, ctrl) {
// Does some setup that requires controller
}
}
这很好用,控制器作为第四个参数传递,指令工作。
现在我决定让指令更灵活,可重复使用。所以,对于指令配置,我添加了
require: '?ngModel'
突然间,现在我的控制器永远不会传递给链接功能。第四个参数没有数组,没有第五个参数,nada。
我尝试将控制器添加到require
指令 - 但它仍然找不到它。
如何添加require
并传递控制器?
答案 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];
}
};
});