Angular JS指令定义——需要ngModelController和自定义控制器

Angular JS Directive Definition - Require ngModelController as well as a custom controller

本文关键字:自定义 控制器 ngModelController 需要 指令 定义 Angular JS      更新时间:2023-09-26

我想让我的Angular指令的大部分功能都在它们的控制器代码中,而link函数只是用来将两个不同的指令控制器绑定在一起。

我遇到了一个问题,当它涉及到"需要"一个控制器,并有"控制器"定义以及。我应该如何在链接函数中获得对我指定的控制器的引用?

示例代码(当然没有所有周围的模块)。指令的东西)

return {
    require:'ngModel',
    controller: 'CustomDirectiveCtrl',
    link: function(scope, element, attrs, controllers)
    {
        console.log(controllers);
    }
};

'controllers'包含了ngModelController,但是没有给我一个访问CustomDirectiveCtrl的方法。

如何从link函数中访问ngModelController和CustomDirectiveCtrl ?

有时候你永远不会发现问题,直到你试着向别人解释。

查看了Angular JS的ngModel的源代码后,我找到了解决方案。下面是如何修复我上面的代码,以防其他人遇到同样的理解问题:

https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js L2347

module.directive('customDirective', function(){
    return {
          require:['customDirective', 'ngModel'],
          controller: 'CustomDirectiveCtrl',
          link: function(scope, element, attrs, controllers){
               // CustomDirectiveCtrl is controllers[0],
               // NgModelController is controllers[1]
               console.log(controllers);
          }
    }
});

我认为需要有一个不同的语法来获得你自己的控制器,而不是获得不同模型的控制器。这比我想象的要简单。