有人知道为什么我的作用域变量没有被更新吗?这让我感到困惑。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)如果用户退出登录,则删除sessionStorage变量。
4)但是,如果用户仍然登录,并刷新/重新加载页面(从浏览器),则sessionStorage变量仍处于活动状态,并且仍然包含数据,但是由于某种原因,当我设置作用域变量例如$scope.user = sessionStorage.user
- 尽管sessionStorage.user完全可行 - 作用域变量仍然未定义。问题似乎与作用域有关。