Angularjs 是否可以在不声明控制器的情况下访问控制器?

Angularjs 是否可以在不声明控制器的情况下访问控制器?,angularjs,angularjs-directive,angularjs-controller,Angularjs,Angularjs Directive,Angularjs Controller,我有一点奇怪的情况,需要我通过指令范围变量将控制器传递给指令。只要每条路由只有一个控制器在使用,这一点就非常有效,这在我的$routeProvider中声明 但是现在我必须在同一个模板中使用两个控制器,这会导致问题,因为我无法使用ng controller声明我的控制器,因为这将引发routeProvider错误,因为我尝试从我的route resolve访问数据。(如果将控制器声明为与解析相同的路由,则只能访问路由解析数据,这使得在模板中使用ng controller,在指令中使用contro

我有一点奇怪的情况,需要我通过指令范围变量将控制器传递给指令。只要每条路由只有一个控制器在使用,这一点就非常有效,这在我的
$routeProvider
中声明

但是现在我必须在同一个模板中使用两个控制器,这会导致问题,因为我无法使用
ng controller
声明我的控制器,因为这将引发routeProvider错误,因为我尝试从我的route resolve访问数据。(如果将控制器声明为与解析相同的路由,则只能访问路由解析数据,这使得在模板中使用
ng controller
,在指令中使用
controller
,对我来说毫无用处)

这就是我想做的:

// Declare one controller in the routing
.when('/someroute', {
  controller: 'MyCtrl'
}

// But pass a different controller to my directive that hasn't been declared 
// in either the route, template or directive
<my-directive ctrl="MyOtherCtrl"></my-directive>
//在路由中声明一个控制器
.when(“/someroute”{
控制器:“MyCtrl”
}
//但将另一个控制器传递给我的指令,该指令尚未声明
//在路由、模板或指令中

但我的问题是,是否有可能访问控制器及其功能,而不在指令或路由中将控制器声明为
ng controller
controller
?我的想法是,有一个服务或某个东西,您可以注入它来保存所有控制器,但到目前为止,我没有找到任何控制器。

您可以使用$controller按名称将th控制器注入到指令控制器中

var someOtherController=$controller('someOtherController',{$scope:$scope})


它的方法现在可以在$scope上使用。不过要小心,事情很快就会变得棘手。

有一种服务可以获取任何控制器的实例,请使用

在指令中,插入
$controller
服务,然后在
链接中使用它
功能:

myApp.directive("myDirective", function($controller){
  return {
  scope: {
    ctrl: "@"
  },
  link: function(scope, element, attrs){
    var myNeededCtrl = $controller(scope.ctrl, {$scope: scope, otherDepenciesThatTheControllerNeed: ...});
    myNeededCtrl.doSomething();
  }
 };
});

您可以在服务中创建控制器中声明的函数,以便可以从where@AlainIb我认为这也不行,因为这两个控制器在逻辑上是完全分开的,我不想把两者结合起来,因为我也需要绑定到范围的东西。我实际上只是尝试了一下,但它也会创建routeProvider错误,因为它似乎在运行控制器构造函数,即使我正在传递字符串。@Chrillewoodz您能给我们您需要的控制器代码吗?