122 votes

Dois-je me désinscrire des observables ActivatedRoute (par exemple params)?

- Je trouver de nombreux exemples de cas où l' ActivatedRoute des Observables comme params ou url sont abonnés, mais pas désabonné.

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);
}
  • Sont les objets d'itinéraire et des abonnements détruit automatiquement et nouvellement créés pour chaque composant de la création?
  • Dois-je pour vous désabonner de ceux - Observables?
  • Si non, pouvez-vous expliquer ce qui se passe avec l'arbre de ActivatedRoute objets en Router.routerState?

239voto

Milad Points 12206

À partir de la documentation :

Lors de la souscription à une observable dans un composant, vous avez presque toujours s'arranger pour se désabonner quand le composant est détruit.

Il y a quelques exceptionnels observables lorsque cela n'est pas nécessaire. Le ActivatedRoute observables sont parmi les exceptions.

Le ActivatedRoute et ses observables sont isolés du Routeur lui-même. Le Routeur détruit un acheminé composant lorsqu'il n'est plus nécessaire et que le injecté ActivatedRoute meurt avec elle.

Se sentir libre de vous désabonner de toute façon. Il est inoffensif et jamais une mauvaise pratique.

18voto

Marian07 Points 789

Comme la réponse gagnante citations sur l' subscriptions de ActivatedRoute, Angulaire unsubscribes automatiquement.

Le Routeur détruit un acheminé composant lorsqu'il n'est plus nécessaire et que le injecté ActivatedRoute meurt avec elle.

Dans le cas où vous voulez savoir comment unsubscribe 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();
  }

}

6voto

Günter Zöchbauer Points 21340

Le composant sera détruit et la routerState deviendra non référencé lorsque le routeur accède à une autre route, qui les fera gratuitement pour obtenir des ordures collectées, y compris les observables.

Si vous passez par des références à ce composant aux autres composants ou de services, le composant ne sera pas nettoyée et l'abonnement est maintenu actif, mais je suis sûr (sans vérifier) que les observables sera complété par le routeur lors de la navigation à l'écart et de la cause de l'abonnement pour l'annuler.

1voto

thegautamnayak Points 71

Chaque fois que vous ajoutez un abonnement à un composant, vous devez presque toujours vous désinscrire lorsque le composant est détruit. Mais s'abonner aux paramètres de route activés ne nécessite pas de se désinscrire car le routeur détruit l'abonnement chaque fois qu'il n'est plus nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X