我目前使用$rootScope
存储用户信息以及用户是否登录。我尝试过使用$window.localStorage
,但没有成功。我的目标是一旦用户登录,让他们的用户名出现在导航栏,个人用户配置文件视图,所有用户视图等中,我的导航栏中的项目通过ng-show显示。我需要持久登录。我有导航栏$rootscope
,但每当我尝试转换到$window.localStorage
时,它都会失败。下面是使用$rootScope
代码:使用本地存储来存储AngularJS数据
mainModule
angular.module('mainModule', [
'ui.router',
...
])
.config(configFunction)
.run(['$rootScope', '$state', 'Auth', function($rootScope, $state, Auth) {
$rootScope.$on('$stateChangeStart', function(event, next) {
if (next.requireAuth && !Auth.getAuthStatus()) {
console.log('DENY');
event.preventDefault();
$state.go('login');
} else if (Auth.getAuthStatus() || !Auth.getAuthStatus()) {
console.log('ALLOW');
}
});
}]);
验证厂
angular.module('authModule').factory('Auth', ['$http', '$state', function authFactory($http, $state) {
var factory = {};
var loggedIn = false;
var userData = {};
factory.getAuthStatus = function() {
$http.get('/api/v1/auth')
.success(function(data) {
if (data.status == true) {
loggedIn = true;
} else {
loggedIn = false;
}
})
.error(function(error) {
console.log(error);
loggedIn = false;
});
return loggedIn;
}
return factory;
}]);
登录控制器
function SigninController($scope, $rootScope, $http, $state) {
$scope.userData = {};
$scope.loginUser = function() {
$http.post('api/v1/login', $scope.userData)
.success((data) => {
$scope.userData = data.data;
$rootScope.loggedIn = true;
$rootScope.userData = data;
$state.go('home');
})
.error((error) => {
console.log('Error: ' + error);
});
};
}
导航控制器
function NavbarController($scope, Auth) {
$scope.loggedIn = Auth.getAuthStatus();
}
编辑编辑编辑
这里是我如何使用本地存储。这些是唯一改变的东西。
登录控制器
function SigninController($scope, $window, $http, $state) {
$scope.userData = {};
$scope.loginUser = function() {
$http.post('api/v1/login', $scope.userData)
.success((data) => {
$scope.userData = data.data;
$window.localStorage.setItem('userData', angular.toJson(data));
$window.localStorage.setItem('loggedIn', true);
$state.go('home');
})
.error((error) => {
console.log('Error: ' + error);
});
};
}
验证厂
angular
.module('authModule')
.factory('Auth', ['$http', '$window', '$state', function authFactory($http, $window, $state) {
var factory = {};
factory.getAuthStatus = function() {
$http.get('/api/v1/auth')
.success(function(data) {
if (data.status == true) {
$window.localStorage.setItem('loggedIn', true);
} else {
$window.localStorage.setItem('loggedIn', false);
}
})
.error(function(error) {
console.log(error);
$window.localStorage.setItem('loggedIn', false);
});
return $window.localStorage.getItem('loggedIn');
}
return factory;
}]);
你可以显示你的尝试不工作吗?另外,使用localStorage,而不是$ window.localStorage。此外,localStorage只存储字符串,所以你会希望使用JSON.stringify()和JSON.parse()来存储/检索你的对象在localStorage – holtc
@holtc是的,给我几分钟!谢谢! – 2b2a
@holtc它已经结束了!你能否提供一个解释,为什么不使用$ window.localStorage?我的例子使用它,因为这是我以前使用过的。 – 2b2a