Je trouve de nombreux exemples où ActivatedRoute
Des observables comme params
ou url
sont abonnés mais non désabonnés.
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.params
// (+) converts string 'id' to a number
.switchMap((params: Params) => this.service.getHero(+params['id']))
.subscribe((hero: Hero) => this.hero = hero);
}
Observable
s?Router
.routerState
?À partir de la documentation :
Lorsque vous vous abonnez à un élément observable dans un composant, vous pouvez presque toujours vous désabonner lorsque le composant est détruit.
Il y a quelques observables exceptionnels où ce n'est pas nécessaire. Les observables ActivatedRoute font partie des exceptions.
ActivatedRoute et ses observables sont isolés du routeur lui-même. Le routeur détruit un composant routé lorsqu'il n'est plus nécessaire et que ActivatedRoute injecté meurt avec lui.
N'hésitez pas à vous désinscrire quand même. C'est inoffensif et jamais une mauvaise pratique.
Le composant sera détruit et routerState ne sera plus référencé lorsque le routeur naviguera vers un autre itinéraire, ce qui les libérera du droit de se faire ramasser les ordures, y compris l'observable.
Si vous transmettez des références de ce composant à d'autres composants ou services, le composant ne sera pas nettoyé et l'abonnement resterait actif, mais je suis sûr (sans vérifier) que l'observable sera complété par le routeur lors de la navigation et faire annuler la souscription.
Chaque fois que vous ajoutez un abonnement à un composant, vous devez presque toujours vous désabonner lorsque le composant est détruit. Mais vous abonner aux paramètres de route activée ne nécessite pas de vous désabonner car le routeur détruit l'abonnement dès qu'il n'est plus nécessaire.
Comme réponse gagnante citations à propos de subscriptions
à ActivatedRoute
, Angular unsubscribes
automatiquement.
Si vous voulez savoir comment unsubscribe
à partir de Observables
:
import { Component,
OnInit,
OnDestroy } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
// Type
import { Subscription } from 'rxjs/Subscription';
@Component({
selector: 'app-example',
templateUrl: './example.component.html',
styleUrls: ['./example.component.scss']
})
export class ExampleComponent implements OnInit, OnDestroy {
paramsSubscription : Subscription;
constructor(private activatedRoute : ActivatedRoute) { }
/* Angular lifecycle hooks
*/
ngOnInit() {
console.log("Component initialized");
this.paramsSubscription = activatedRoute.params.subscribe( params => {
});
}
ngOnDestroy() {
console.log("Component will be destroyed");
this.paramsSubscription.unsubscribe();
}
}