2015-10-15 174 views
1

我正在創建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'); 
    }; 
}]); 

我更喜歡使用setItem和sessionStorage的方法的getItem ...

一個工作的jsfiddle爲例:https://jsfiddle.net/royto/pk8f05La/

+0

你讓我的一天開心:) –

相關問題