Ответ 1
Похоже, вы ищете поставщик.
Вы должны использовать рецепт поставщика только тогда, когда вы хотите открыть API для всей конфигурации приложения, которая должна быть выполнена до запуска приложения. Обычно это интересно только для многоразовых сервисов, поведение которых может немного варьироваться между приложениями.
Вот очень простой пример поставщика:
myMod.provider('greeting', function() {
var text = 'Hello, ';
this.setText = function(value) {
text = value;
};
this.$get = function() {
return function(name) {
alert(text + name);
};
};
});
Это создает новую службу, как и вы, с myMod.service
или myMod.factory
, но предоставляет дополнительный API, доступный во время настройки, а именно метод setText
. Вы можете получить доступ к поставщику в блоках config
:
myMod.config(function(greetingProvider) {
greetingProvider.setText("Howdy there, ");
});
Теперь, когда мы вводим службу greeting
, Angular вызовет метод провайдера $get
(вводя любые сервисы, которые он запрашивает по своим параметрам), и дает вам все, что он возвращает; в этом случае $get
возвращает функцию, которая при вызове с именем будет предупреждать имя с тем, что мы установили с помощью setText
:
myMod.run(function(greeting) {
greeting('Ford Prefect');
});
// Alerts: "Howdy there, Ford Prefect"
Именно так работают другие поставщики, такие как $httpProvider
и $routeProvider
.
Для получения дополнительной информации о поставщиках и инъекции зависимостей в общем случае ознакомьтесь с этим SO-вопросом об инъекции зависимостей.