如何在会话存储中使用相同的密钥更新数组值

时间:2018-05-14 14:00:46

标签: angularjs

我的管理界面中有两个标签。我将响应存储在会话存储中。当我更新选项卡中的任何记录或者我也插入新记录时,同样的事情也应该反映在存储中。但目前,这些变化并没有反映在存储中。我尽力排练,但我无法成功。任何帮助/建议都非常感谢。

Angularjs:

$scope.Pool = [];
if (!localStorageService.get('Pool')) {
   Role.getPool().success(function(data) {
    if (data.responseCode === 0) {
    _.forEach(data.response.demoPool, function(value, key) {
    dataObj = {};

    dataObj.id = value.poolId;
    dataObj.value = value.poolName;

    $scope.Pool.push(dataObj);
});

localStorageService.set('Pool', $scope.Pool);
} else {
   $scope.alerts.alert = true;
   $scope.alerts.type = 'danger';
   $scope.alerts.msg = data.errorMsg;                    
 }                 
})

2 个答案:

答案 0 :(得分:2)

第一次会这样做,因为!localStorageService.get('Pool')变为true。但是下次它会返回false因为存储已经有值,它将不会进入if条件。所以要解决此问题,请删除会话存储'池'以允许执行 Role.getPool()。success(function(data){

答案 1 :(得分:1)

          if (!sessionStorage.length) {
          // Ask other tabs for session storage
          localStorage.setItem('getSessionStorage', Date.now());
        };

window.addEventListener('storage', function (event) {
            switch (event.key) {
              case 'getSessionStorage':
                // Some tab asked for the sessionStorage -> send it
                localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage));
                localStorage.removeItem('sessionStorage');
                break;
              case 'sessionStorage':
                // sessionStorage is empty -> fill it
                var data = JSON.parse(event.newValue);
                for (key in data) {
                  sessionStorage.setItem(key, data[key]);
                }
                break;
            }
          });