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