不知道给这个标题的标题,但基本上我有一个我自己创建的授权提供程序,需要在配置阶段配置一个requireLogin()函数,该函数将在以后运行。像这样......
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);
}
}
});
这是提供者代码
activity_main.xml
旁注:我正在使用ng-annotate,所以不要使用DI的数组语法。
无论如何,正如你所看到的,在配置阶段存储的函数稍后将使用$ auth.requireLogin.then(...)等调用,需要访问angular-ui模态服务,但是当我稍后从提供者内部调用该函数时,显然DI事件没有发生,因为我所做的就是将$ modal放在我的函数的参数中,这不是魔术。我也不能将$ modal放在我的提供者的依赖项中,因为现在这样做太早了,我的提供者也不知道我传递的函数需要什么依赖项。
我觉得答案可能是:
A)在我传入的函数中使用注入器来访问$ modal服务或
B)在外部调用时以某种方式从提供程序内部运行函数,并以某种方式获取在运行时注入的所有提供的依赖项?
很抱歉,如果我无法轻易解释这一点。我试图制作一个JSfiddle,但不能轻易破解代码。