Quelle est la différence entre ActivatedRouteSnapshot
et ActivatedRoute
dans Angular 4? Je crois comprendre que ActivatedRouteSnapshot
est un enfant de ActivatedRoute
, ce qui signifie que ActivatedRoute
contient ActivatedRouteSnapshot
.
Incidemment, j'ai essayé de lancer une recherche sur Google pour trouver une réponse à cette question, mais je n'ai trouvé aucun des résultats de la recherche compréhensible.
Je vous remercie!
Puisque ActivatedRoute
peut être réutilisé , ActivatedRouteSnapshot
est un objet immuable représentant une version particulière de ActivatedRoute
. Il expose les mêmes propriétés que ActivatedRoute
en tant que valeurs simples, tandis que ActivatedRoute
les expose en tant qu'observables.
Voici le commentaire dans l'implémentation:
export class ActivatedRoute {
/** The current snapshot of this route */
snapshot: ActivatedRouteSnapshot;
Si un routeur réutilise un composant et ne crée pas de nouvelle route activée, vous aurez deux versions de ActivatedRouteSnapshot
pour le même ActivatedRoute
. Supposons que vous ayez la configuration de routage suivante:
path: /segment1/:id,
component: AComponent
Maintenant, vous naviguez vers:
/segment1/1
Vous aurez le param dans le activatedRoute.snapshot.params.id
comme 1
.
Maintenant, vous naviguez vers:
/segment1/2
Vous aurez le param dans le activatedRoute.snapshot.params.id
comme 2
.
Vous pouvez le voir en implémentant ce qui suit:
export class AComponent {
constructor(r: ActivatedRoute) {
r.url.subscribe((u) => {
console.log(r.snapshot.params.id);
});
Il existe 2 manières d'obtenir le paramètre de la route.
route.snapshot.paramMap.get
). Lisez-le pendant init.Utilisez l'instantané si vous n'avez besoin de la valeur initiale du paramètre qu'une seule fois lors de l'initialisation du composant, et ne vous attendez pas à ce que l'URL change pendant que l'utilisateur se trouve toujours sur le même composant.
route.paramMap.subscribe
). Abonnez-vous pendant init.Utilisez Observable s'il est possible que la route change alors que l'utilisateur se trouve toujours sur le même composant. L'initialisation du composant ne serait donc pas appelée à nouveau, mais l'observable appellerait votre logique abonnée lorsque l'URL a été modifiée.
En règle générale, l'abonnement est la voie la plus sûre si vous n'êtes pas sûr.