gpt4 book ai didi

javascript - Angularjs session 存储和范围

转载 作者:行者123 更新时间:2023-12-03 00:00:18 25 4
gpt4 key购买 nike

有人知道为什么我的作用域变量没有更新吗?这让我难以置信。 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、用户名:“user123”、名字:“”、姓氏:“”、电子邮件:“username@gmail.com”}- 用户的 gravatar 哈希值也存储在 sessionStorage.user.gravatar 变量中。

3) 如果用户注销,sessionStorage 变量将被删除。

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

最佳答案

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

尝试这样的事情

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

然后

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

关于javascript - Angularjs session 存储和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23312864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com