首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刷新时$rootScope.currentUser为空

刷新时$rootScope.currentUser为空
EN

Stack Overflow用户
提问于 2014-06-13 04:55:00
回答 2查看 20.9K关注 0票数 18

我能够让firebaseSimpleLogin工作,并将当前用户存储在rootScope中。当我转到另一个页面并返回到提要页面时,所有内容都会加载,但是当我刷新时,$rootScope.currentUser是空的。其他人也有这个问题吗?

我的app.run函数中有这段代码:

代码语言:javascript
复制
$rootScope.$on('$firebaseSimpleLogin:login',function(e, auth){
   $rootScope.currentUser = User.find(auth.id);
});

这是我的FeedCtrl,它试图加载用户的帖子

代码语言:javascript
复制
app.controller('FeedCtrl',['$scope', '$rootScope','User','Auth','Post',function($scope,     $rootScope,User,Auth,Post){
 populateFeed();
 console.log($rootScope.currentUser);

$scope.logout = function(){
   Auth.logout();
};


$scope.savePost = function(){
  Post.create($scope.post).then(function(post){
    $scope.post.text = "";
  });
};

function populateFeed(){
   $scope.posts = {};
   angular.forEach($rootScope.currentUser.posts,function(id){
    $scope.posts[id] = Post.find(id);
   });
}

}]);

我的主应用程序模块

代码语言:javascript
复制
var app = angular.module('myapp',['ui.router','firebase']);

app.config(function($stateProvider, $urlRouterProvider){
  $stateProvider
.state('/',{
  url: '/',
  controller: 'MainCtrl',
  templateUrl: 'views/index.html'
})
.state('feed',{
  url: '/feed',
  controller: 'FeedCtrl',
  templateUrl: 'views/feed.html',
  authenticate: true
})
.state('login',{
  url: '/login',
  controller: 'LoginCtrl',
  templateUrl: 'views/login.html'
})
.state('signup',{
  url: '/signup',
  controller: 'LoginCtrl',
  templateUrl: 'views/signup.html'
})
.state('settings',{
  url: '/settings',
  controller: 'SettingsCtrl',
  templateUrl:"views/settings.html"
})
.state('profile',{
  url: '/:slug',
  controller: 'ProfileCtrl',
  templateUrl: 'views/profile.html'
})
.state('profile-about',{
  url: '/:slug/about',
  controller: 'ProfileCtrl',
  templateUrl: 'views/profile.html'
});

$urlRouterProvider.otherwise('/');
})
.constant('FIREBASE_URL','https://{FIREBASE}.firebaseio.com/')
.run(function($rootScope, $state,FIREBASE_URL, $firebaseSimpleLogin, User, Auth){
$rootScope.$on('$stateChangeStart',function(event, next){
  if(next.authenticate && !User.getCurrentUser()){
     $state.go('login');
  }
 });

 $rootScope.$on('$firebaseSimpleLogin:login',function(e, auth){
   $rootScope.currentUser = User.find(auth.id);
  });

 $rootScope.$on('$firebaseSimpleLogin:logout',function(){
  delete $rootScope.currentUser;
  $state.go('login');
 });

 $rootScope.logout = function(){
  Auth.logout();
};

});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-15 04:11:58

如果你所说的“刷新”是指你在浏览器中点击了F5,这将会把你的$rootscope从内存中抹去,你将会得到你所体验到的空值(基本上你的整个应用程序都会被“重启”)。

为了持久化值,您需要将它们存储在cookie中,或者使用localStorage/sessionStorage。例如,使用$window.sessionStorage.currentUser而不是$rootscope.currentUser。

票数 28
EN

Stack Overflow用户

发布于 2016-06-07 16:33:54

存储在localStorage中:$window.localStorage.setItem("currentUser",currentUser);

或者以json格式存储:$window.localStorage.setItem("currentUser",angular.toJson(currentUser));

要从那里获得它: var currentUser = $window.localStorage.getItem("currentUser");

或者,如果您使用第二种方法保存它: JSON.parse($window.localStorage.getItem("currentUser"));currentUser = var

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24193743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档