我目前使用$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