#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 контроллеры (вместе с директивами, фильтрами и анимациями) являются просто синтаксическим сахаром для провайдера. Провайдеры могут быть настроены с помощью блоков конфигурации: документация блока конфигурации
Блоки конфигурации — выполняются на этапе регистрации и настройки поставщика. В блоки конфигурации могут быть введены только поставщики и константы. Это делается для предотвращения случайного создания экземпляров служб до их полной настройки.