Tengo problemas para evitar que una de mis páginas quede en blanco después de actualizar mi navegador.
Cuando un usuario visita /user/:username , se carga profile.html . Funciona según lo previsto en la primera carga, pero si actualizo la página, me queda una salida JSON sin procesar en la pantalla (anteriormente, solo decía " null ").
Para más contexto, tengo un ng-href en mi archivo home.html :
<h3>View your profile page <a ng-href="/user/{{user.username}}">here</a>.</h3>El archivo angular correspondiente:
var app = angular.module('social', ['ngRoute', 'ngCookies']) app.config(function($routeProvider, $locationProvider) { $routeProvider .when('/', { templateUrl: 'home.html', controller: 'HomeController' }) .when('/login', { templateUrl: 'login.html', controller: 'LoginController' }) .when('/signup', { templateUrl: 'signup.html', controller: 'SignupController' }) .when('/user/:username', { templateUrl: 'profile.html', controller: 'UserProfileController' }) $locationProvider.html5Mode(true)})
Mi controlador:
app.controller('UserProfileController', function($http, $scope, $cookies, $rootScope, $routeParams) { console.log("$cookies.get('currentUser')") console.log($cookies.get('currentUser')) function getCurrentUser() { $http.get('/user/' + $routeParams.username).then(function(res) { console.log('res.data in the user profile controller') console.log(res.data) $scope.user = res.data }) } if ($cookies.get('currentUser') != undefined) { getCurrentUser() } else { console.log("No one is here.") }})
Conseguí que esto funcionara eliminando $locationProvider.html5Mode(true) y usando ng-href="#/user/{{user.username}}" , lo que significa que no se pierden datos al actualizar la página, y yo no obtener una pantalla en blanco. Pero, el problema es que el # aparece en la URL, lo que eventualmente no querré. Obviamente, si envío una aplicación como esta a producción, no quiero que aparezca el # en la URL. Si tiene que ser su durante el desarrollo, puedo vivir con eso.
También debo señalar que solo tengo este problema con /user/:username . Todas mis otras rutas ( / , /login y /signup ) funcionan como se esperaba, lo que significa que las páginas no quedan en blanco después de una actualización y todos los datos persisten debido al uso de cookies.
AngularJS almacena sus datos en la memoria, por lo que cuando actualice la página perderá los datos, es por eso que su página se quedó con expresiones sin procesar porque angularr perdió los datos necesarios para los enlaces.
Puede usar las resoluciones de route resolves para obtener los datos necesarios para cada ruta, de modo que cuando actualice la página, angular llamará a la función de resolución para esa ruta que devolverá los datos al controlador.