Borrar historial y volver a cargar la página al iniciar sesión / cerrar sesión con Ionic Framework

Soy nuevo en el desarrollo de aplicaciones móviles con Ionic. Al iniciar y cerrar sesión, necesito volver a cargar la página, para actualizar los datos, sin embargo, $state.go('mainPage') lleva al usuario de vuelta a la vista sin volver a cargar; nunca se invoca el controlador detrás de él.

¿Hay alguna manera de borrar el historial y volver a cargar el estado en Ionic?

Bienvenido al marco! En realidad, el enrutamiento en Ionic funciona con ui-router . Probablemente deberías revisar esta pregunta anterior de SO para encontrar un par de formas diferentes de lograr esto.

Si solo quieres volver a cargar el estado, puedes usar:

 $state.go($state.current, {}, {reload: true}); 

Si realmente desea volver a cargar la página (como en, desea reiniciar todo), puede usar:

 $window.location.reload(true) 

¡Buena suerte!

Descubrí que la respuesta de JimTheDev solo funcionaba cuando la definición de estado tenía cache:false . Con la vista almacenada en caché, puede hacer $ionicHistory.clearCache() y luego $state.go('app.fooDestinationView') si está navegando desde un estado al que se almacena en caché pero que necesita actualizarse.

Vea mi respuesta aquí, ya que requiere un cambio simple a Ionic y creé una solicitud de extracción: https://stackoverflow.com/a/30224972/756177

Encontré una solución que me ayudó a hacerlo. Establecer cache-view="false" en ion-view etiqueta ion-view resolvió mi problema.

  ....  

La respuesta correcta:

 $window.location.reload(true); 

Volver a cargar la página no es el mejor enfoque.

puede manejar eventos de cambio de estado para volver a cargar datos sin volver a cargar la vista.

lea sobre el ciclo de vida iónicoVer aquí:

http://blog.ionic.io/navigating-the-changes/

y manejar el evento antes de ingresar para la recarga de datos.

 $scope.$on('$ionicView.beforeEnter', function(){ // Any thing you can think of }); 

En mi caso, necesito borrar solo la vista y reiniciar el controlador. Pude obtener mi intención con este fragmento:

 $ionicHistory.clearCache([$state.current.name]).then(function() { $state.reload(); } 

La caché sigue funcionando y parece que solo se borró la vista.

ionic --version dice 1.7.5.

Ninguna de las soluciones mencionadas anteriormente funcionó para un nombre de host que es diferente de localhost .

Tuve que agregar notify: false a la lista de opciones que paso a $state.go , para evitar llamar a los escuchas de cambios angulares, antes $window.location.reload llame a $window.location.reload call. El código final se ve así:

$state.go('home', {}, {reload: true, notify: false});

>>> EDITAR – $ timeout podría ser necesario dependiendo de su navegador >>>

$timeout(function () { $window.location.reload(true); }, 100);

<<< FIN DE EDICION <<<

Más sobre esto en la referencia de ui-enrutador .

Estaba tratando de hacer una página de actualización usando angularjs cuando vi sitios web que me confundieron pero no había código funcionando para el código, luego obtuve la solución para recargar la página usando

 $state.go('path',null,{reload:true}); 

usar esto en una función esto funcionará.

Necesitaba volver a cargar el estado para que las barras de desplazamiento funcionen. No funcionaron cuando pasaron por otro estado: ‘registro’. Si la aplicación se cerró forzosamente después del registro y se volvió a abrir, es decir, se fue directamente al estado “de origen”, las barras de desplazamiento funcionaron. Ninguna de las soluciones anteriores funcionó.

Cuando después del registro, reemplacé:

 $state.go("home"); 

con

 window.location = "index.html"; 

La aplicación se recargó y las barras de desplazamiento funcionaron.

El controlador se llama solo una vez, y DEBERÍA preservar este modelo lógico, lo que suelo hacer es:

Creo un método $scope.reload(params)

Al comienzo de este método, llamo $ionicLoading.show({template:..}) para mostrar mi spinner personalizado

Cuando el proceso de recarga puede finalizar, puedo llamar $ionicLoading.hide() como una callback

Finalmente, dentro del botón REFRESH, añado ng-click = "reload(params)"

El único inconveniente de esta solución es que pierdes el sistema de historia de navegación iónica

¡Espero que esto ayude!

Si desea volver a cargar después de cambiar la vista, necesita

 $state.reload('state',{reload:true}); 

Si quieres hacer que esa vista sea la nueva “raíz”, puedes decir iónico que la próxima vista será la raíz

  $ionicHistory.nextViewOptions({ historyRoot: true }); $state.go('app.xxx'); return; 

Si desea que sus controladores se vuelvan a cargar después de cada cambio de vista

 app.config(function ($stateProvider, $urlRouterProvider, $ionicConfigProvider) { $ionicConfigProvider.views.maxCache(0); 

.state (url: ‘/ url’, controlador: Ctl, templateUrl: ‘template.html’, cache: falso) cache: falso ==> ¡resolvió mi problema!

Como lo señalan los controladores de recarga @ezain solo cuando es necesario. Otra forma más limpia de actualizar los datos cuando se cambian los estados en lugar de volver a cargar el controlador es mediante el uso de eventos de difusión y la escucha de dichos eventos en los controladores que necesitan actualizar los datos en las vistas.

Ejemplo: en sus funciones de inicio de sesión / cierre de sesión puede hacer algo como esto:

 $scope.login = function(){ //After login logic then send a broadcast $rootScope.$broadcast("user-logged-in"); $state.go("mainPage"); }; $scope.logout = function(){ //After logout logic then send a broadcast $rootScope.$broadcast("user-logged-out"); $state.go("mainPage"); }; 

Ahora, en el controlador de su página principal, active los cambios en la vista usando la función $ on para escuchar la transmisión dentro del controlador de la página principal de la siguiente manera:

 $scope.$on("user-logged-in", function(){ //update mainPage view data here eg. $scope.username = 'John'; }); $scope.$on("user-logged-out", function(){ //update mainPage view data here eg. $scope.username = ''; }); 

Intenté muchos métodos, pero encontré que este método es absolutamente correcto:

 $window.location.reload(); 

Espero que esto ayude a otros atrapados por días como yo con la versión: angular 1.5.5, iónica 1.2.4, angular-ui-enrutador 1.0.0