我正在创建SPA Web应用程序并使用SessionStorage在浏览器中存储当前用户信息。我用Chrome进行测试。 在测试进度中我发现当用户登录成功时,SessionStorage会在控制台中更新,但是当我刷新页面时我无法访问此附加值。
我该如何解决这个问题?
这是我的角度服务,负责在sessionStorage中存储和检索currentUser:
app.service("sessionStorageService", ["$window","$q", function ($window, $q) {
var deferred = $q.defer();
this.setCurrentUser = function (user) {
$window.sessionStorage["currentUser"] = JSON.stringify(user);
},
this.getCurrentUser = function () {
if ($window.sessionStorage["currentUser"]) {
console.log("bega") ;
deferred.resolve(JSON.parse($window.sessionStorage["currentUser"]));
return deferred.promise;
} else {
console.log("bega1") ;
deferred.reject("No Login User");
return deferred.promise ;
}
};
}]);
此商店成功同时但是为了检索当前用户,我必须刷新页面。因为温泉,我不可能:(
答案 0 :(得分:0)
您的问题与您使用1个承诺($ q.deffer)的事实相关联,而不是在每次调用时创建一个
此处您的服务已更新(我使用$ q.when返回值而不创建新的承诺)
app.service('sessionStorageService', ['$window', '$q', function ($window, $q) {
this.setCurrentUser = function (user) {
$window.sessionStorage.setItem('currentUser', JSON.stringify(user));
},
this.getCurrentUser = function () {
if ($window.sessionStorage.getItem('currentUser')) {
return $q.when(JSON.parse($window.sessionStorage.getItem('currentUser')));
} else {
var deferred = $q.defer();
deferred.reject('No Login User');
return deferred.promise;
}
};
this.clearCurrentUser = function () {
$window.sessionStorage.removeItem('currentUser');
};
}]);
我更喜欢在sessionStorage上使用setItem和getItem方法......
一个有效的jsfiddle例子:https://jsfiddle.net/royto/pk8f05La/