route example child activatedroute angular angular-routing angular2-router

example - ¿Cuál es la diferencia entre ActivatedRoute y ActivatedRouteSnapshot en Angular4?



angular router (2)

¿Cuál es la diferencia entre ActivatedRouteSnapshot y ActivatedRoute en Angular 4? Tengo entendido que ActivatedRouteSnapshot es un hijo de ActivatedRoute , lo que significa que ActivatedRoute contiene ActivatedRouteSnapshot .

Por cierto, traté de realizar una búsqueda en Google para obtener una respuesta a esta pregunta, pero no encontré ninguno de los resultados de búsqueda que sean comprensibles.

¡Gracias!


Dado que ActivatedRoute se puede reutilizar , ActivatedRouteSnapshot es un objeto inmutable que representa una versión particular de ActivatedRoute . Expone todas las mismas propiedades que ActivatedRoute como valores simples, mientras que ActivatedRoute expone como observables.

Aquí está el comentario en la implementación:

export class ActivatedRoute { /** The current snapshot of this route */ snapshot: ActivatedRouteSnapshot;

Si un enrutador reutiliza un componente y no crea una nueva ruta activada, tendrá dos versiones de ActivatedRouteSnapshot para el mismo ActivatedRoute . Supongamos que tiene la siguiente configuración de enrutamiento:

path: /segment1/:id, component: AComponent

Ahora navega a:

/segment1/1

Tendrá el parámetro en enabledRoute.snapshot.params.id como 1 .

Ahora navega a:

/segment1/2

Tendrá el parámetro en enabledRoute.snapshot.params.id como 2 .

Puedes verlo implementando lo siguiente:

export class AComponent { constructor(r: ActivatedRoute) { r.url.subscribe((u) => { console.log(r.snapshot.params.id); });


Hay 2 formas de obtener el parámetro de la ruta.

1. Instantánea ( route.snapshot.paramMap.get ). Léelo durante el ctor.

Use la instantánea si solo necesita el valor inicial del parámetro una vez durante el constructor / init del componente, y no espere que la URL cambie mientras el usuario aún esté en ese mismo componente.

  • Es decir, si está en una ruta de producto / 2, y la única forma en que llegarían al producto / 3 es volver a la pantalla de búsqueda de productos y luego hacer clic en el detalle del producto (dejando el componente de detalle, luego volviendo a abrirlo con un nuevo ruta param)

2. Observable ( route.paramMap.subscribe ). Suscríbete durante el ctor.

Use el Observable si es posible que la ruta cambie mientras el usuario aún está en el mismo componente, y por lo tanto, no se volverá a llamar al constructor / init del Componente, pero el observable llamará a su lógica suscrita cuando cambie la URL.

  • Es decir, si en la página de detalles de su producto tiene un botón "siguiente" para ir a la siguiente ID, el usuario no dejó / volvió a abrir el componente, pero la URL recibió un nuevo parámetro.