Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将控制器添加到指令?_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

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

Javascript 如何将控制器添加到指令?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我正在尝试在我的应用程序中创建一个指令。然而,我需要在不同的地方使用指令,它们有自己的控制器 所以在我的指令中 directive('test', [function($popover) { return { restrict: 'E', scope: false, link: function(scope, elem, attrs) { } }; } ])

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

所以在我的指令中

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

            }
        };
    }
])
如何将两个控制器添加到一个指令


谢谢

您可以使用
name
controller=“@”
选项

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

            }
        };
    }

我认为你不能注入两个控制器,你应该考虑另一种方法,你不必注入控制器。可以使用指定为属性的控制器。这就是你想要的吗?嗯。。。在我的字典里找不到。你是怎么发现的?这有点让人困惑,在独立作用域绑定中使用与绑定相同的“@”如何?显然未记录的
name
属性用于指定控制器属性名称,因此您可以使用
name:“ctrl”
,它将使用
crtl
属性而不是
controller
,但是您仍然需要
控制器:“@”,
…很久以前,我在查看angular指令实现时发现了它,然后我尝试了一下,但没有记录下来,我不知道为什么。可以为属性使用任何名称,在该属性中可以指定控制器。它查找
@
作为控制器名称。它与隔离作用域的
@
无关。它们是两个不同的实现。@JasonGoemaat请参阅angular代码段中部分的更新答案。
  <test controller="ctrl1"></test>
   .....
  <test controller="ctrl2"></test>
         if (controllerDirectives) {
         ....

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

            controllerInstance = $controller(controller, locals);