$ rootScope.currentUser имеет значение null для обновления
Мне удалось заставить firebaseSimpleLogin работать и хранить текущего пользователя в rootScope. Когда я перейду на другую страницу и вернусь на страницу подачи, все загрузится, но когда я обновляю $rootScope.currentUser, это значение равно null. У кого-нибудь еще была эта проблема?
У меня есть эта часть кода в моей функции app.run:
$rootScope.$on('$firebaseSimpleLogin:login',function(e, auth){
$rootScope.currentUser = User.find(auth.id);
});
И это мой FeedCtrl, который пытается загрузить сообщения пользователя
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);
});
}
}]);
Мой основной модуль приложения
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();
};
});
Ответы
Ответ 1
Если вы "обновляете" означает, что вы нажмете F5 в браузере, который вытечет ваш корневой корневой каталог из памяти, и вы получите нулевой результат по мере его возникновения (в основном все ваше приложение будет "перезапущено" ).
Чтобы сохранить значения, вам необходимо либо сохранить их в файле cookie, либо использовать localStorage/sessionStorage. Например, вместо использования $rootscope.currentUser используйте $window.sessionStorage.currentUser.
Ответ 2
Чтобы сохранить его в localStorage:
$ window.localStorage.setItem( "currentUser", currentUser);
или сохранить в json формате:
$ window.localStorage.setItem( "currentUser", angular.toJson(currentUser));
Чтобы получить форму:
var currentUser = $window.localStorage.getItem( "currentUser" );
или если вы сохранили его, используя второй способ:
var currentUser = JSON.parse($ window.localStorage.getItem( "currentUser" ));