Estoy usando angular 2 con estrategia de hashlocation.
El componente se carga con esa ruta:
"departments/:id/employees"
Hasta ahora bien.
Después de realizar un guardado por lotes exitoso de varias filas de tablas editadas, quiero volver a cargar la URL de ruta actual a través de:
this.router.navigate([`departments/${this.id}/employees`]);
Pero no pasa nada, ¿por qué?
Respuestas:
Si su navegador () no cambia la URL que ya se muestra en la barra de direcciones de su navegador, el enrutador no tiene nada que hacer. No es el trabajo del enrutador actualizar los datos. Si desea actualizar los datos, cree un servicio inyectado en el componente e invoque la función de carga en el servicio. Si se recuperan los nuevos datos, actualizará la vista mediante enlaces.
fuente
Esto ahora se puede hacer en Angular 5.1 utilizando la
onSameUrlNavigation
propiedad de la configuración del enrutador.He agregado un blog que explica cómo aquí, pero lo esencial es lo siguiente
https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
En la
onSameUrlNavigation
opción de habilitación de configuración del enrutador , configúrelo en'reload'
. Esto hace que el enrutador active un ciclo de eventos cuando intenta navegar a una ruta que ya está activa.En sus definiciones de ruta, establezca
runGuardsAndResolvers
enalways
. Esto le indicará al enrutador que siempre inicie los guardias y los ciclos de resolución, disparando los eventos asociados.Finalmente, en cada componente que le gustaría habilitar la recarga, debe manejar los eventos. Esto se puede hacer importando el enrutador, vinculando los eventos e invocando un método de inicialización que restablece el estado de su componente y vuelve a buscar datos si es necesario.
Con todos estos pasos en su lugar, debe habilitar la recarga de ruta.
fuente
init
función?init
?Cree una función en el controlador que redirija a la ruta esperada así
entonces úsalo así
Esta función redirigirá a una ruta ficticia y volverá rápidamente a la ruta de destino sin que el usuario se dé cuenta.
fuente
'/'
lugar de'/DummyComponent'
EDITAR
Para versiones más recientes de Angular (5.1+), use la respuesta sugerida por @Simon McClive
Vieja respuesta
Encontré esta solución en una solicitud de función de GitHub para Angular:
Intenté agregar esto a mi función app.component.ts
ngOnInit
, y seguro funcionó. Todos los clics adicionales en el mismo enlace ahora vuelven a cargar loscomponent
datos y.Enlace a la solicitud de función original de GitHub
El crédito va a mihaicux2 en GitHub.
Probé esto en la versión
4.0.0-rc.3
conimport { Router, NavigationEnd } from '@angular/router';
fuente
Poco complicado: usa el mismo camino con algunos params ficticios. Por ejemplo-
fuente
this.router.navigate(['/pocetna'], { queryParams: { 'refresh': 1 } });
yroute.queryParams.subscribe(val => myRefreshMethod())
dónderoute: ActivatedRoute
se inyecta en el componente actualizado ... Espero que ayudeEstoy usando este para el proyecto Angular 9:
PD: Probado y funciona también en "Angular 7, 8"
fuente
Hack de recarga angular de 2-4 rutas
Para mí, usar este método dentro de un componente raíz (componente, que está presente en cualquier ruta) funciona:
fuente
Esto me funciona como un encanto
fuente
En el cambio de parámetros, la página de recarga no sucederá. Esta es una muy buena característica. No es necesario volver a cargar la página, pero debemos cambiar el valor del componente. El método paramChange invocará el cambio de URL. Para que podamos actualizar los datos del componente
fuente
Esto es lo que hice con Angular 9 . No estoy seguro de si esto funciona en versiones anteriores.
Tendrá que llamar a esto cuando necesite recargar.
El enrutador paraRoot necesita tener SameUrlNavigation configurado para 'recargar'
Y todas sus rutas deben tener runGuardsAndResolvers configurados en 'siempre'
fuente
Para mí trabaja hardcoding con
fuente
Hasta donde sé, esto no se puede hacer con el enrutador en Angular 2. Pero podría hacer lo siguiente:
Para recargar la vista.
fuente
Encontré una solución rápida y directa que no requiere jugar con el funcionamiento interno de angular:
Básicamente: solo cree una ruta alternativa con el mismo módulo de destino y solo alterne entre ellos:
Y aquí el menú de alternancia:
Espero eso ayude :)
fuente
Un poco duro pero
fuente
En mi caso:
trabajo correcto
fuente
implementar OnInit y llamar a ngOnInit () en el método para route.navigate ()
Ver un ejemplo:
fuente
Resolvió un escenario similar mediante el uso de un componente ficticio y una ruta para
reload
, que en realidad hace aredirect
. Esto definitivamente no cubre todos los escenarios de los usuarios, pero solo funcionó para mi escenario.El enrutamiento está conectado para capturar todas las URL utilizando un comodín:
Para usar esto, solo necesitamos agregar recargar a la url donde queremos ir:
fuente
Existen diferentes enfoques para actualizar la ruta actual
Cambiar el comportamiento del enrutador (desde Angular 5.1) Configure los enrutadores enSameUrlNavigation para 'recargar'. Esto emitirá los eventos del enrutador en la misma navegación URL.
Deje el enrutador intacto
He escrito una explicación más detallada en https://medium.com/@kevinkreuzer/refresh-current-route-in-angular-512a19d58f6e
Espero que esto ayude.
fuente
Suponga que la ruta del componente que desea actualizar es
view
, luego use esto:puede agregar un
debugger
método interno para saber cuál será la ruta exacta después de navegar"departments/:id/employees"
.fuente
Una solución es pasar un parámetro ficticio (es decir, el tiempo en segundos), de esta manera el enlace siempre se recarga:
fuente
Estoy usando
setTimeout
ynavigationByUrl
para resolver este problema ... Y está funcionando bien para mí.Se redirige a otra URL y, en su lugar, vuelve a aparecer en la URL actual ...
fuente
Creo que esto se ha resuelto (de forma nativa) en Angular 6+; cheque
aquí https://github.com/angular/angular/issues/13831 &&
y aquí https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
Pero esto funciona para una ruta completa (incluye todas las rutas secundarias también)
Si desea apuntar a un solo componente, así es como: use un parámetro de consulta que cambie, para que pueda navegar tantas veces como desee.
En el punto de navegación (clase)
En el componente que desea "actualizar / recargar"
fuente
Muy frustrante que Angular todavía no parece incluir una buena solución para esto. He planteado un problema de github aquí: https://github.com/angular/angular/issues/31843
Mientras tanto, esta es mi solución. Se basa en algunas de las otras soluciones sugeridas anteriormente, pero creo que es un poco más robusto. Implica envolver el servicio de enrutador en un "
ReloadRouter
", que se encarga de la funcionalidad de recarga y también agrega unRELOAD_PLACEHOLDER
a la configuración del enrutador central. Esto se utiliza para la navegación intermedia y evita la activación de otras rutas (o guardias).Nota: Use solo
ReloadRouter
en esos casos cuando desee la funcionalidad de recarga. Use lo normal de loRouter
contrario.fuente
Importar
Router
yActivatedRoute
desde@angular/router
Inyectar
Router
yActivatedRoute
(en caso de que necesite algo de la URL)Obtenga cualquier parámetro si es necesario de la URL.
El uso de un truco al navegar a una URL ficticia o principal y luego a la URL real actualizará el componente.
En tu caso
Si usa una ruta ficticia, verá un parpadeo del título 'No encontrado' si ha implementado una url no encontrada en caso de que no coincida con ninguna url.
fuente
suscribirse a los cambios de parámetros de ruta
fuente
Si está cambiando la ruta a través de Router Link, siga esto:
fuente
Debe usar la propiedad "onSameUrlNavigation" en RouterModule y luego suscribirse a los eventos de ruta https://blog.angularindepth.com/refresh-current-route-in-angular-512a19d58f6e
fuente
Decide cuándo se debe almacenar la ruta y devuelve false a
y establece el valor navegado del enrutador en falso, que muestra que esta ruta nunca enrutada
fuente
He intentado algunas correcciones y ninguna de ellas funciona. Mi versión es simple: agregar un nuevo parámetro no utilizado en los parámetros de consulta
fuente
window.location.replace
// usa la tecla de retroceso para encerrar la ruta
window.location.replace (
departments/${this.id}/employees
)fuente