w3schools example entre diferencia and angularjs firebase angularfire

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.