Angular провайдер принимает функцию, которая нуждается в зависимостях
Я не был уверен, какой заголовок дать этому, но в основном у меня есть провайдер авторизации, который я создал сам, который необходимо настроить на этапе конфигурации, чтобы иметь функцию requireLogin(), которая будет запущена позднее. Как это...
// Configure $auth service
app.config(function ($authProvider, appConfig) {
$authProvider.setRequireLoginFunction(function($modal){
// Use the modal service
});
})
И это код провайдера
app.provider('$auth', function(){
var _requireLoginFn;
return({
setRequireLoginFunction: setRequireLoginFunction,
$get: instantiateAuth
});
function setRequireLoginFunction(fn){
_requireLoginFn = fn;
}
function instantiateAuth($http, $q) {
return({
requireLogin: requireLogin
});
function requireLogin() {
return _requireLoginFn.apply(undefined, arguments);
}
}
});
Sidenote: Я использую ng-annotate, поэтому не используйте синтаксис массива DI.
В любом случае, как вы можете видеть, функция, которая хранится в фазе конфигурации, которая позже будет вызываться с использованием $ auth.requireLogin.then (...) и т. Д., Нуждается в доступе к модальной службе angular-ui, но когда я вызываю функция позже внутри провайдера, очевидно, не работает с DI, потому что все, что я сделал, это вставил $ modal в аргументы моей функции, что не волшебство. Я также не могу поместить $ modal в зависимости моего провайдера, потому что это делать слишком рано, также мой провайдер не знает, какие зависимости понадобятся функции, которую я передаю.
Я чувствую, что ответ, вероятно, на:
А) использовать инжектор в функции, которую я передаю, чтобы получить доступ к $ модальному сервису или
Б) Каким-то образом запустить функцию изнутри провайдера при внешнем вызове и каким-то образом получить все предоставленные зависимости, внедренные во время выполнения?
Извините, если я не могу объяснить это легко. Я пытался создать JSfiddle, но не смог легко взломать код.