#angularjs #provider
#angularjs #поставщик
Вопрос:
Я хочу использовать поставщика для установки некоторых параметров конфигурации при запуске моего приложения AngularJS, но я хотел бы, чтобы приложение и поставщик были в 2 отдельных файлах.
Вот как у меня это сейчас:
var myApp = angular.module('myApp', []);
myApp.config(function(myServiceProvider) {
....etc.
Поставщик определяется следующим образом:
angular.module('myApp').provider('myService', function () {
...etc.
Если я загружаю приложение первым, провайдера еще нет, а если я загружаю провайдера первым, приложения еще нет.
Каков был бы наилучший способ решить эту проблему?
Ответ №1:
Определение вашего модуля включает в себя модульные зависимости, а не службы или поставщиков.
Это должно быть:
var myApp = angular.module('myApp', []);
Блок конфигурации всегда выполняется после инициализации ваших поставщиков. Проблемы с циклической зависимостью нет.
Файл 1: Определение модуля
angular.module('myApp', []);
Файл 2: определение поставщиков
angular.module('myApp').provider('myService',function() {...});
Файл 3: Определение блока конфигурации
angular.module('myApp').config(function(myServiceProvider) { ... });
HTML:
<script src="/angular.js"></script>
<script src="/file1.js"></script>
<script src="/file2.js"></script>
<script src="/file3.js"></script>
Порядок файлов важен.
Комментарии:
1. мой плохой, но удаление этого по-прежнему создает ту же проблему, вероятно, из-за того, что MyApp.config требует его внедрения
2. В вашем определении модуля должен быть пустой массив модулей в качестве зависимости. В противном случае вы пытаетесь получить модуль, который еще не был определен.
3. да, извините, но тогда все та же проблема.
4. Ах, я думаю, я знаю, в чем проблема. У вас не может быть определения модуля и вызова метода конфигурации в одном файле. Поставщик еще не определен.
5. @Maarten: Примечание : многое изменилось в версии Angular
1.3.0-beta.8
и более поздних версиях. Начиная с этой версии,.config()
блоки выполняются после загрузки служб и т.д., Поэтому порядок появления не играет роли. Смотрите также эту короткую демонстрацию .
Ответ №2:
в вашем первом файле:
var myApp = angular.module('myApp', []);
myApp.config(function(myServiceProvider) {
....etc.
и в вашем втором файле:
myApp.provider('myService', function () {
...etc.
Переменная MyApp является глобальной переменной, и вы можете получить к ней доступ везде на своем веб-сайте.
Вы можете взглянуть на Yeoman project, это генератор, который создает структуру вашего приложения angularjs и добавляет множество интересных функций.
Комментарии:
1. это просто другой синтаксис для добавления поставщика в приложение, но это не решает мою проблему