Angularjs 如何在angular指令中使用注册控制器?

Angularjs 如何在angular指令中使用注册控制器?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个控制器注册如下: myModule.controller('MyController', function ($scope, ...some dependencies...) { .... otherModule.directive('myDirective', function() { return { restrict: 'A', replace: true, controller: ??????????,

我有一个控制器注册如下:

myModule.controller('MyController', function ($scope, ...some dependencies...)
{
    ....
otherModule.directive('myDirective', function() {
    return {
        restrict: 'A',
        replace: true,
        controller: ??????????,
        scope: {
            foo: '=',
            blah: '=',
        },
        template: '....'
    }
});
在HTML中使用
ng controller=“MyController”
一切正常,但现在我想使用此控制器作为指令的控制器。像这样的事情:

myModule.controller('MyController', function ($scope, ...some dependencies...)
{
    ....
otherModule.directive('myDirective', function() {
    return {
        restrict: 'A',
        replace: true,
        controller: ??????????,
        scope: {
            foo: '=',
            blah: '=',
        },
        template: '....'
    }
});
我厌倦了只放
MyController
,但它错误地说“MyController未定义”。我敢肯定,如果我只是把
MyController
放在全局名称空间中,它会工作得很好,但我不希望全局名称空间中有任何内容。如果有区别,
myModule
被定义为
otherModule
的依赖项。如何获取此控制器的引用以供指令使用

正如建议的那样,我尝试了
$controller('MyController')
,但现在我得到了以下错误:

Error: Unknown provider: $scopeProvider <- $scope <- myDirectiveDirective
at Error (<anonymous>)
at http://localhost/resources/angular.js?_=1360613988651:2627:15
at Object.getService [as get] (http://localhost/resources/angular.js?_=1360613988651:2755:39)
at http://localhost/resources/angular.js?_=1360613988651:2632:45
at getService (http://localhost/resources/angular.js?_=1360613988651:2755:39)
at invoke (http://localhost/resources/angular.js?_=1360613988651:2773:13)
at Object.instantiate (http://localhost/resources/angular.js?_=1360613988651:2805:23)
at http://localhost/resources/angular.js?_=1360613988651:4621:24
at otherModule.directive.restrict (http://localhost/resources/app.js?_=1360613988824:862:15)
at Object.invoke (http://localhost/resources/angular.js?_=1360613988651:2786:25) 

错误:未知提供程序:$scopeProvider似乎您可以使用:

controller: 'MyController' 
如果控制器与指令位于同一模块中,或由包含指令的模块组成的更高级别模块中


当我尝试将两个不同的模块组合成一个应用程序模块(一个用于控制器,一个用于指令)时,它不起作用。

您已经接受的答案是有效的,并且在几乎所有情况下都应该选择

为完整起见:以下是如何使用另一模块的控制器

(PS:不要这样做。lol:p)

var-app=angular.module('myApp',['myDirectives']);
应用控制器('AppCtrl1',功能($scope){
$scope.foo='bar';
});
var directives=angular.module('myDirectives',[]);
指令。指令('test',函数($controller){
返回{
模板:“{foo}}”,
链接:功能(范围、要素、属性){
变量控制器=$controller('AppCtrl1',{$scope:scope});
console.log($scope.foo);//bar
}
};
});

+1这个答案是最好的。。。但对于其他任何发现此问题并需要访问另一个模块中的控制器的人,我添加了另一个答案。。。有办法访问现有的吗?没有,你不能。如果您想共享一个控制器,那么将指令嵌套在div ng控制器中,并且不要使用隔离作用域。在指令外部定义指令的控制器构造函数有点奇怪。如果没有其他原因,指令控制器构造函数与ng控制器类控制器构造函数的可注入参数是不同的。谢谢你的回答,你是对的,我们不应该这样做。为什么不呢?我觉得很干净。@nikkwong嗯,FWIW,情人眼里出西施。。。但是,通过将dependencyB的依赖项($scope)硬编码到函数调用中来注入dependencyA($controller)以获得dependencyB(AppCtrl1),这根本不是我所说的“干净”。