angularjs - example - $ rootScope.currentUser es nulo en la actualización
rootscope between controllers (2)
Pude hacer que firebaseSimpleLogin funcione y almacene al usuario actual en el rootScope. Cuando voy a otra página y vuelvo a la página de noticias, todo se carga, pero cuando actualizo $ rootScope.currentUser es nulo. ¿Alguien más ha tenido este problema?
Tengo este fragmento de código en mi función app.run:
$rootScope.$on(''$firebaseSimpleLogin:login'',function(e, auth){
$rootScope.currentUser = User.find(auth.id);
});
Y este es mi FeedCtrl que está intentando cargar en las publicaciones del usuario.
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);
});
}
}]);
Mi módulo de aplicación principal
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();
};
});
Para almacenarlo en localStorage: $ window.localStorage.setItem ("currentUser", currentUser);
o almacenar en formato json: $ window.localStorage.setItem ("currentUser", angular.toJson (currentUser));
Para obtenerlo allí: var currentUser = $ window.localStorage.getItem ("currentUser");
o si lo guardó utilizando la segunda forma: var currentUser = JSON.parse ($ window.localStorage.getItem ("currentUser"));
Si, por "actualización", significa que presionó F5 en el navegador que borrará su $ rootscope de la memoria y obtendrá una recuperación nula a medida que lo experimente (básicamente, toda la aplicación se "reiniciará").
Para conservar los valores, debe almacenarlos en una cookie o usar localStorage / sessionStorage. Por ejemplo, en lugar de usar $ rootscope.currentUser use $ window.sessionStorage.currentUser.