0

不知道给这个标题是什么,但基本上我有一个我自己创建的授权提供程序,需要在配置阶段进行配置,以便拥有一个 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);
        }

    }

});

旁注:我使用的是 ng-annotate,所以不要使用 DI 的数组语法。

无论如何,如您所见,存储在配置阶段的函数稍后将使用 $auth.requireLogin.then(...) 等调用。需要访问 angular-ui 模态服务,但是当我调用稍后从提供程序内部的函数显然没有发生 DI 的事情,因为我所做的只是将 $modal 放在我的函数的参数中,这并不神奇。我也不能将 $modal 放在我的提供者的依赖项中,因为这样做还为时过早,而且我的提供者也不知道我传入的函数需要哪些依赖项。

我觉得答案可能是:

A)在我传入的函数中使用注入器来访问 $modal 服务或

B)以某种方式在外部调用时从提供程序内部运行该函数,并以某种方式在运行时注入所有提供的依赖项?

抱歉,如果我无法轻松解释这一点。我试图制作一个 JSfiddle,但无法轻松破解代码。

4

0 回答 0