2

我正在尝试编写我的 Angular 指令,以便在其控制器的代码中拥有它们的大部分功能,而链接函数仅用于将两个不同的指令控制器绑定在一起。

当涉及到“需要”控制器和定义“控制器”时,我遇到了问题。我应该如何在链接函数中获得对我指定的控制器的引用?

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

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

“控制器”包含 ngModelController,但没有给我访问 CustomDirectiveCtrl 的方法。

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

4

1 回答 1

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

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

于 2014-07-10T20:16:42.987 回答