Estoy usando Angular UI Router y me gustaría volver a cargar el estado actual y actualizar todos los datos / volver a ejecutar los controladores para el estado actual y su padre.
Tengo 3 niveles de estado: directorio.organizaciones.detalles
directory.organisations contiene una tabla con una lista de organizaciones. Al hacer clic en un elemento de la tabla, se cargan los directorios.organisations.details con $ StateParams que pasa la ID del elemento. Entonces, en el estado de detalles, cargo los detalles de este elemento, los edito y luego guardo los datos. Todo bien hasta ahora.
Ahora necesito volver a cargar este estado y actualizar todos los datos.
Yo he tratado:
$state.transitionTo('directory.organisations');
Supongo que el estado pasa al estado principal pero no recarga el controlador porque la ruta no ha cambiado. Idealmente, solo quiero permanecer en el estado del directorio.organisations.details y actualizar todos los datos en el padre también.
También he intentado:
$state.reload()
He visto esto en la API WIKI para $ state.reload "(error con la reinstalación de los controladores en este momento, corrección pronto)".
¿Cualquier ayuda sería apreciada?
fuente
$state.transitionTo($state.current, $stateParams, {reload:true, inherit:false})
agregar el código ? Tener este mismo problema con la recarga de mis estados es perder todos los datos.Respuestas:
Encontré que esta es la forma de trabajo más corta para actualizar con ui-router:
Actualización para versiones más nuevas:
Cuál es un alias para:
Documentación: https://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state#methods_reload
fuente
ui-router
método para ello, creo. Hacerwindow.location.reload(true)
.$window.location.reload();
. Aunque esto parece un poco exagerado, podría hacer que probar / burlarse / conocer todas las dependencias de una pieza de código haga las cosas un poco más fáciles.Esta solución funciona en AngularJS V.1.2.2:
fuente
resolve
elementos del estado?Esa sería la solución final. (inspirado en la publicación de @ Hollan_Risley)
Ahora, cada vez que necesite recargar, simplemente llame:
fuente
para marco iónico
https://github.com/angular-ui/ui-router/issues/582
fuente
$state.go
no se pudo redirigir a un estado nuevo. Gracias @RouR. Me salvó el día$state
? Estoy ejecutando iónico 1.4.0, angular 1.5.3Probablemente el enfoque más limpio sería el siguiente:
Podemos recargar el estado solo desde el HTML.
fuente
La respuesta de @Holland Risley ahora está disponible como api en el último enrutador ui.
http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state
fuente
fuente
fuente
si quiere volver a cargar toda su página, como parece, simplemente inyecte $ window en su controlador y luego llame
pero si solo desea volver a cargar su vista actual, inyecte $ scope, $ state y $ stateParams (este último en caso de que necesite cambiar algunos parámetros en esta próxima recarga, algo así como su número de página), entonces llame a esto dentro de cualquier método de controlador:
AngularJS v1.3.15 angular-ui-router v0.2.15
fuente
Solución tonta que siempre funciona.
fuente
Para angular v1.2.26, ninguno de los anteriores funciona. Se deberá hacer clic dos veces en un ng-click que llame a los métodos anteriores para que el estado se vuelva a cargar.
Así que terminé emulando 2 clics usando $ timeout.
fuente
Todo me falló. Lo único que funcionó ... es agregar cache-view = "false" en la vista que quiero recargar cuando vaya a ella.
de este número https://github.com/angular-ui/ui-router/issues/582
fuente
No estoy seguro de por qué ninguno de estos parecía funcionar para mí; el que finalmente lo hizo fue:
Esto fue con Angular 1.4.0
fuente
Tenía varias vistas anidadas y el objetivo era volver a cargar solo una con contenido. Intenté diferentes enfoques, pero lo único que funcionó para mí es:
En este caso, solo se volvería a cargar la vista necesaria y el almacenamiento en caché seguiría funcionando.
fuente
Sé que ha habido un montón de respuestas, pero la mejor forma en que he encontrado para hacer esto sin causar una actualización completa de la página es crear un parámetro ficticio en la ruta que quiero actualizar y luego, cuando llamo a la ruta, paso un número aleatorio al parámetro ficticio.
y luego la llamada a esa ruta
Funciona como un encanto y maneja los resuelve.
fuente
Puede usar la respuesta @Rohan https://stackoverflow.com/a/23609343/3297761
Pero si desea que cada controlador se vuelva real después de un cambio de vista, puede usar
fuente
Si está utilizando ionic v1, la solución anterior no funcionará ya que ionic ha habilitado el almacenamiento en caché de plantillas como parte de $ ionicConfigProvider.
Evitar eso es un poco hacky: debe establecer el caché en 0 en el archivo ionic.angular.js:
fuente
Tuve este problema: me estaba destrozando la cabeza, mi ruta se lee desde un archivo JSON y luego se alimenta a una directiva. Podía hacer clic en un estado ui pero no podía volver a cargar la página. Así que un colega mío me mostró un pequeño truco para ello.
Esto funcionó para mí.
Espero eso ayude
fuente