Angular JS指令定义 - 需要ngModelController以及自定义控制器

时间:2014-07-10 20:11:18

标签: javascript angularjs dependency-injection angularjs-directive angularjs-compile

我试图编写我的Angular指令,使其大部分功能都在其控制器的代码中,链接函数只是用于将两个不同的指令控制器绑定在一起。

当涉及到“控制器”和“控制器”这两个问题时,我遇到了问题。定义也是如此。我怎么能在链接功能中获得我指定的控制器的参考?

示例代码(当然没有所有周围的module.directive东西)

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

'控制器'包含ngModelController,但没有给我一种访问CustomDirectiveCtrl的方法。

如何从链接功能访问ngModelController和CustomDirectiveCtrl?

1 个答案:

答案 0 :(得分:1)

有时候,在您尝试向其他人解释之前,您永远不会发现问题。

在查看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);
          }
    }
});

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