如何在不刷新页面的情况下更新会话存储数据?

时间:2015-10-15 08:11:08

标签: javascript angularjs html5

我正在创建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 ;
        }
    };

}]);

此商店成功同时但是为了检索当前用户,我必须刷新页面。因为温泉,我不可能:(

1 个答案:

答案 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/