programing

Angularjs 세션스토리지 및 범위

goodcopy 2023. 3. 30. 00:03
반응형

Angularjs 세션스토리지 및 범위

왜 내 범위 변수가 업데이트되지 않는지 아는 사람?정말 놀랍다.sessionStorage 변수는 정상이지만 범위 변수 내에서 정의하면..'정의되지 않은' 오류가 나타납니다.나는 $scope로 돈을 벌었다.$140, 하지만 스코프는 이미 소화되고 있는 것 같습니다.: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.userdata.user 변수에는 일반적으로 이러한 종류의 정보가 포함되어 있습니다.{id: 1, username: "user123", firstname: "", lastname: "", email: "username@gmail.com"}사용자의 그라바타 해시는 sessionStorage.user.gravatar 변수에도 저장됩니다.

3) 사용자가 로그아웃하면 sessionStorage 변수가 삭제됩니다.

4) 단, 사용자가 아직 로그인하고 있는 경우 (브라우저에서) 페이지를 새로고침/새로고침하면 sessionStorage 변수는 여전히 활성화되며 범위 변수를 설정할 때 어떤 이유로든 데이터가 포함됩니다. $scope.user = sessionStorage.usersessionStorage.user가 완벽하게 실행 가능하더라도 스코프 변수는 정의되지 않은 상태로 유지됩니다.스코프에 문제가 있는 것 같다.

사용자 개체는 문자열 값의 집합으로 구현되므로 sessionStorage에 저장하기 전에 JSON에 직렬화해야 합니다.

이런 거 해봐

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

그리고 나서.

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

현재 angularjs에는 JSON이 없습니다.stringify는 sessionStorage에서 $scope 값을 할당합니다.

$sessionStorage.user = $scope.user;

$sessionStorage 서비스에 대한 자세한 문서

AngularJS - $sessionStorage by Scriptwerx는 Angular에서 사용하는 서비스입니다.JS 어플리케이션

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

언급URL : https://stackoverflow.com/questions/23312864/angularjs-sessionstorage-and-scope

반응형