Не удается внедрить AuthenticationController

#javascript #angularjs #dependency-injection

#javascript #angularjs #внедрение зависимостей

Вопрос:

Я пытаюсь внедрить контроллер в свою app.run функцию, однако я продолжаю получать:

 Uncaught Error: [$injector:unpr] http://errors.angularjs.org/1.2.10/$injector/unpr?p0=AuthenticationControllerProvider <- AuthenticationController 
  

Вот мой app.js :

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

app.run(['$rootScope', 'AuthenticationService', 'AuthenticationController',
    function($rootScope, AuthenticationService, AuthenticationController) {

        console.log(AuthenticationController);
    }
]);
  

Вводится AuthenticationService просто отлично. Почему AuthenticationController они не вводятся?

Комментарии:

1. пожалуйста, предоставьте код, в котором вы определяете обе службы

2. Я не верю, что вы можете вводить контроллеры в блоки запуска.

3. Это невозможно в Angular. Почему вы пытаетесь внедрить контроллер?

Ответ №1:

Как указано в документации AngularJS по модулям:

Блоки запуска — выполняются после создания инжектора и используются для запуска приложения. В блоки выполнения можно вводить только экземпляры и константы. Это делается для предотвращения дальнейшей настройки системы во время выполнения приложения.

В документации для контроллеров говорится:

В Angular контроллер — это функция конструктора JavaScript, которая используется для расширения области видимости Angular. Когда контроллер подключается к DOM с помощью директивы ng-controller, Angular создаст экземпляр нового объекта контроллера, используя указанную функцию конструктора контроллера.

Контроллер — это функция конструктора экземпляра, а не сам экземпляр, в отличие от службы, которая есть. Поэтому, из того, что я могу собрать, контроллеры не могут быть введены в блок запуска.

Если вам нужно настроить контроллер во время запуска, используйте поставщика. Как выясняется, в angular контроллеры (вместе с директивами, фильтрами и анимациями) являются просто синтаксическим сахаром для провайдера. Провайдеры могут быть настроены с помощью блоков конфигурации: документация блока конфигурации

Блоки конфигурации — выполняются на этапе регистрации и настройки поставщика. В блоки конфигурации могут быть введены только поставщики и константы. Это делается для предотвращения случайного создания экземпляров служб до их полной настройки.