Digamos que tengo 2 rutas '/users' y /users/:id . El primero representa UserListComponent y el segundo UserViewComponent .
Quiero volver a renderizar el componente cuando navego de /users/1 a /users/2 . Y por supuesto si navego de /users a /users/1 y viceversa.
Pero NO quiero volver a renderizar el componente si navego desde /users/1?tab=contacts a /users/1?tab=accounts .
¿Hay alguna manera de configurar un enrutador como este para toda la aplicación?
--
Actualizar:
Estoy importando RouterModule en AppRoutingModule así:
RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' })
estoy usando angular 12
El comportamiento predeterminado del enrutador angular es conservar el componente actual cuando la URL coincide con la ruta actual.
Este comportamiento se puede cambiar usando la opción onSameUrlNavigation :
Defina qué debe hacer el enrutador si recibe una solicitud de navegación a la URL actual. El valor predeterminado es
ignore, lo que hace que el enrutador ignore la navegación. Esto puede deshabilitar funciones como el botón "actualizar". Utilice esta opción para configurar el comportamiento al navegar a la URL actual. El valor predeterminado es "ignorar".
Desafortunadamente, esta opción no es lo suficientemente detallada como para permitir la reload de parámetros de ruta e ignore los parámetros de consulta.
Por lo tanto, debe suscribirse tanto a los parámetros de consulta como a los cambios de parámetros de ruta con algo como esto:
constructor(route: ActivatedRoute) { } ngOnInit() { this.renderLogic(); this.route.params.subscribe(() => this.renderLogic()); this.route.queryParams.subscribe(() => this.renderLogic()); } renderLogic() { // ... }Hasta donde yo sé, @Guerric P es correcto, no puede volver a renderizar completamente el componente de forma selectiva de esta manera, al menos no sin algunos trucos como suscribirse a cada evento y luego posiblemente bloquearlo para un escenario y no para el otro. Siéntase libre de probar algo así, pero a continuación hay una alternativa si utiliza resolutores para obtener sus datos.
Lo que puede hacer es usar runGuardsAndResolvers en la configuración de su ruta de la siguiente manera:
const routes = [{ path: 'team/:id', component: Team, children: [{ path: 'user/:name', component: User }], runGuardsAndResolvers: 'pathParamsChange', resolvers: {...}, canActivate: [...] }]Esto, como sugiere el nombre, ejecutará nuevamente la lógica de resolución de guardia. Si obtiene datos mediante resolutores y los pasa a sus componentes, puede actualizar lo que muestra su componente solo cuando cambian la ruta o los parámetros.