Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs会话存储和范围_Javascript_Angularjs - Fatal编程技术网

Javascript Angularjs会话存储和范围

Javascript Angularjs会话存储和范围,javascript,angularjs,Javascript,Angularjs,有人知道为什么我的范围变量没有被更新吗?这让我难以置信。sessionStorage变量很好,但是当我在范围变量中定义它们时。。我有“未定义”的错误。我已经修改了$scope.$apply,但显然这个范围已经被消化了…:S请帮助一个新手 if(sessionStorage.loggedIn){ $scope.user = sessionStorage.user; $scope.user.gravatar = sessionStorage.gravatar; co

有人知道为什么我的范围变量没有被更新吗?这让我难以置信。sessionStorage变量很好,但是当我在范围变量中定义它们时。。我有“未定义”的错误。我已经修改了$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:“username@gmail.com“}
-用户的gravatar哈希也存储在sessionStorage.user.gravatar变量中

3) 如果用户注销,会话存储变量将被删除


4) 但是,如果用户仍然登录,刷新/重新加载页面(从浏览器),sessionStorage变量仍然处于活动状态,并且仍然包含数据,但出于某种原因,当我设置范围变量时,例如,
$scope.user=sessionStorage.user
——范围变量保持未定义——尽管sessionStorage.user是完全可行的。问题似乎与范围有关

在存储到sessionStorage之前,需要将用户对象序列化为JSON,因为它是作为字符串值的集合实现的

试试这样的

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

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

现在angularjs没有JSON.stringify,只需在sessionStorage中分配$scope值即可

$sessionStorage.user = $scope.user;

AngularJS-$sessionStorage by Scriptwerx是一项在AngularJS应用程序中使用的服务

npm安装--保存dev swx会话存储

您确定sessionStorage.user是一个对象吗?您能否指定正在调用的事件链,以及将其放入JSFIDLE、jsbin或PLUNK时所期望的行为?同样重要的可能是您正在使用的浏览器相关:@JimmyRare是的,我可以确认它是一个json对象,例如,
{id:1,用户名:“user123”,firstname:,lastname:,email:username@gmail.com“}
旁注:还有。