一年半以前,我写了一个角度应用程序,使用这个authSrv
登录和注销用户使用我的后端API,它工作得很好。我只是尝试再次运行相同的代码,我得到一个Error: [$injector:undef] Provider 'authSrv' must return a value from $get factory method.
这是我的authSrv
(工厂)代码:
app.factory('authSrv', function ($rootScope, $http, $auth, $state, config, $q) {
var deferred = $q.defer();
this.login = function (email, password) {
// Show loading dialog
$rootScope.showLoading();
var credentials = {
email: email,
password: password
};
return $auth.login(credentials)
.then(
function (result) {
$http.get(config.server + 'restricted/user')
.then(function (response) {
// Stringify the returned data to prepare it
// to go into local storage
var user = JSON.stringify(response.data.user);
// Set the stringified user data into local storage
localStorage.setItem('user', user);
// The user's authenticated state gets flipped to
// true so we can now show parts of the UI that rely
// on the user being logged in
$rootScope.auth = true;
// Putting the user's data on $rootScope allows
// us to access it anywhere across the app
$rootScope.currentUser = response.data.user;
// Remove loading dialog
$rootScope.hideLoading();
// Everything worked out so we can now redirect to
// the users state to view the data
$state.go('app.artists');
deferred.resolve(response.data.user);
// promise is returned
return deferred.promise;
});
},
function (error) {
// the following line rejects the promise
deferred.reject(error);
// Remove loading dialog
$rootScope.hideLoading();
// promise is returned
return deferred.promise;
});
};
this.logout = function () {
// Show loading dialog
$rootScope.showLoading();
$auth.logout().then(function () {
// Remove the authenticated user from local storage
localStorage.removeItem('user');
// Flip authenticated to false so that we no longer
// show UI elements dependant on the user being logged in
$rootScope.auth = false;
// Remove the current user info from rootscope
$rootScope.currentUser = null;
$state.go('app.auth').then(function () {
// Remove loading dialog
$rootScope.hideLoading();
});
});
};
});
为什么我现在得到错误而不是当时?有什么变化吗?
答案 0 :(得分:1)
您应该使用app.service()
,而不是app.factory()
。工厂是应该创建和返回服务实例的函数。您的函数是构造函数,初始化this
。这是service()
的用途。