Do I have to unsubscribe from ActivatedRoute (e.g. params) observables?

hgoebl picture hgoebl · Dec 14, 2016 · Viewed 28.4k times · Source

I find many examples where ActivatedRoute Observables like params or url are subscribed but not unsubscribed.

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);
}
  • Are the route objects and subscriptions destroyed automagically and newly created for every component creation?
  • Do I have to care about unsubscribing from those Observables?
  • If not, can you explain what happens with the tree of ActivatedRoute objects in Router.routerState?

Answer

Milad picture Milad · Dec 28, 2016

From the docs :

When subscribing to an observable in a component, you almost always arrange to unsubscribe when the component is destroyed.

There are a few exceptional observables where this is not necessary. The ActivatedRoute observables are among the exceptions.

The ActivatedRoute and its observables are insulated from the Router itself. The Router destroys a routed component when it is no longer needed and the injected ActivatedRoute dies with it.

Feel free to unsubscribe anyway. It is harmless and never a bad practice.