如何将控制器添加到指令?

时间:2014-08-28 19:27:59

标签: javascript angularjs angularjs-directive

我正在尝试在我的应用中创建一个指令。但是,我需要在不同的地方使用指令,并且它们有自己的控制器。

所以在我的指令中

directive('test', [function($popover) {
        return {
            restrict: 'E',
            scope: false,
            link: function(scope, elem, attrs) {

            }
        };
    }
])

如何将两个控制器添加到一个指令?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用namecontroller="@"选项。

.directive('test', [function($popover) {
        return {
            restrict: 'E',
            scope: false,
            controller : "@", 
            name:"controller",
            template:'<div>{{value}}</div>',
            link: function(scope, elem, attrs) {

            }
        };
    }

例如: -

  <test controller="ctrl1"></test>
   .....
  <test controller="ctrl2"></test>

当您指定controller= '@' angular时,将查找已注册的控制器,其中包含为name选项中提到的元素属性(您可以为该属性指定任何名称)指定的属性值

<强> Plnkr

以下是角度指令实现的片段: -

         if (controllerDirectives) {
         ....

            controller = directive.controller;
            if (controller == '@') {
              controller = attrs[directive.name];
            }

            controllerInstance = $controller(controller, locals);