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, но не смог легко взломать код.

0 ответов

Другие вопросы по тегам