当我使用下面的代码时,出现以下错误:
提供者“登录”必须从 $get 工厂方法返回一个值。
我已经查看了 stackoverflow 帖子here https://stackoverflow.com/questions/27738903/provider-xx-must-return-a-value-from-get-factory-method-in-angularjs and here https://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion-asi,但无法弄清楚我做错了什么。
myApp.factory('Login', function($location, $firebaseAuth, Ref, Auth) {
var authData = Ref.getAuth();
if (authData) {console.log('already logged in with ' + authData.uid)} else {
return Auth.$authAnonymously({rememberMe: true}).then(redirect, showError);
function redirect() {
$location.path('/account');
}
function showError(err) {
Login.err = err;
}
}
});
按照factory
你必须返回一个对象。由于您没有返回任何内容,这意味着其他服务/控制器无法使用此服务。
如果您只是检查身份验证,它必须位于您的身份验证服务内,并且必须是 IIFE 函数。这将检查并重定向用户。
例如:
在任一 Auth/Ref 服务中,创建一个 IIFE
(function() {
var authData = Ref.getAuth();
if (authData) {console.log('already logged in with ' + authData.uid)} else {
return Auth.$authAnonymously({rememberMe: true}).then(redirect, showError);
function redirect() {
$location.path('/account');
}
function showError(err) {
Login.err = err;
}
}
})();
否则在里面插入代码init()
方法并在您的服务中调用它。所以这只会运行一次。
当您想要公开单例接口以供应用程序的其他部分使用时,您必须使用服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)