Подтвердить что ты не робот

Как я могу использовать зарегистрированный контроллер в моей директиве angular?

У меня есть контроллер, зарегистрированный следующим образом:

myModule.controller('MyController', function ($scope, ...some dependencies...)
{
    ....

Используя ng-controller="MyController" в HTML, все работает отлично, но теперь я хочу использовать этот контроллер в качестве моего контрольного контроллера. Что-то вроде этого:

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) 

Я не уверен, что делать с этой ошибкой. Нужно ли больше делать эту работу?

4b9b3361

Ответ 1

Похоже, вы можете просто использовать:

controller: 'MyController' 

ЕСЛИ контроллер находится в том же модуле, что и директива или модуль более высокого уровня, состоящий из модуля с директивой в нем.

Когда я попробовал это с двумя разными модулями, составленными в модуль приложения (один для контроллера и один для директивы), это не сработало.

Ответ 2

Ответ, который вы уже приняли, работает, и почти во всех случаях следует выбирать...

Для полноты: вот как вы можете использовать контроллер из другого модуля

(PS: Не делайте этого. lol: P)

var app = angular.module('myApp', ['myDirectives']);

app.controller('AppCtrl1', function($scope) {
    $scope.foo = 'bar';
});


var directives = angular.module('myDirectives', []);

directives.directive('test', function($controller) {
   return {
       template: '<h1>{{foo}}</h1>',
       link: function(scope, elem, attrs) {
          var controller = $controller('AppCtrl1', { $scope: scope });

          console.log($scope.foo); //bar
       }
   };
});