Подтвердить что ты не робот

Angularjs sessionStorage и область действия

Кто-нибудь знает, почему переменные области видимости не обновляются? Мне это поразило. Переменные sessionStorage являются точными, но когда я определяю их в переменных области. Я получаю ошибки "undefined". Я применил $scope. $Apply, но, видимо, область уже усваивается...: S, пожалуйста, помогите новичку.

  if(sessionStorage.loggedIn){

    $scope.user = sessionStorage.user;  
    $scope.user.gravatar = sessionStorage.gravatar;
    console.log($scope.user.gravatar);
    console.log('Session variable is active');
    $scope.loggedIn = sessionStorage.loggedIn;

  }

полный код:

app.controller('loginCtrl', ['$scope','$route','Auth','$modal','$timeout', function($scope,$route,Auth,$modal,$timeout){

  if(sessionStorage.loggedIn){

    $scope.user = sessionStorage.user;  
    $scope.user.gravatar = sessionStorage.gravatar;
    console.log($scope.user.gravatar);
    console.log('Session variable is active');
    $scope.loggedIn = sessionStorage.loggedIn;

  }

  $scope.login = function(){
    Auth.save({
      'username': $scope.username,
      'password': $scope.password
    },function(data) {
      $scope.loggedIn = true;
      $scope.user = data.user;
      $scope.user.gravatar = data.gravatar;

      sessionStorage.loggedIn = $scope.loggedIn;
      sessionStorage.user = data.user; 
      sessionStorage.gravatar = data.gravatar;
      $route.reload();

    },function(response){
      $scope.flash = response.data.flash;   
      $scope.pop = true;    
      $timeout(function(){$scope.pop = false;}, 3000);
    })

  };

  $scope.logout = function (){
    Auth.get({},function(){  
      delete sessionStorage.user;
      delete sessionStorage.gravatar;
      delete sessionStorage.loggedIn;
      $scope.loggedIn = false;
      $timeout(function(){$route.reload();}, 1000);
    })
  };


}]);

Сводная информация о цепочке событий:

1) Пользователь регистрируется в

2) После успешного входа пользовательские данные (объект json) хранятся в sessionStorage.user = data.user, а переменная data.user обычно содержит такую ​​информацию {id: 1, username: "user123", firstname: "", lastname: "", email: "[email protected]"} - пользовательский хэш файл также сохраняется в переменной sessionStorage.user.gravatar.

3) Если пользователь выходит из системы, переменные sessionStorage удаляются.

4) Однако, если пользователь все еще зарегистрирован, обновляет/перезагружает страницу (из браузера), переменная sessionStorage по-прежнему активна и все еще содержит данные, НО по какой-то причине, когда я устанавливаю переменные области, например. $scope.user = sessionStorage.user - переменная scope остается undefined - несмотря на то, что sessionStorage.user является абсолютно жизнеспособным. Проблема, похоже, связана с областью.

4b9b3361

Ответ 1

Вам нужно сериализовать свой пользовательский объект в JSON перед сохранением в sessionStorage, потому что он реализован как набор строковых значений.

Попробуйте что-то вроде этого

 sessionStorage.user = JSON.stringify($scope.user);

а затем

 $scope.user = JSON.parse(sessionStorage.user);

Ответ 2

В настоящее время angularjs не имеет JSON.stringify, просто присваивает значения $ scope в sessionStorage

$sessionStorage.user = $scope.user;

Для получения подробной документации по сервису $ sessionStorage

AngularJS - $ sessionStorage от Scriptwerx - это сервис для использования в ваших приложениях AngularJS.

npm install --save-dev angular-swx-session-storage