什么时候应该存储Subscription
实例并在ngOnDestroy
生命周期中调用unsubscribe()
,什么时候可以简单地忽略它们?
保存所有订阅会给组件代码带来很多混乱。
HTTP客户端指南忽略这样的订阅:
getHeroes() {this.heroService.getHeroes().subscribe(heroes => this.heroes = heroes,error => this.errorMessage = <any>error);}
在同一时间路线和导航指南说:
最终,我们将导航到其他地方。路由器将从DOM中删除此组件并销毁它。在此之前,我们需要自己清理。具体来说,我们必须在Angular销毁组件之前取消订阅。不这样做可能会造成内存泄漏。
我们取消订阅
ngOnDestroy
方法中的Observable
。
private sub: any;
ngOnInit() {this.sub = this.route.params.subscribe(params => {let id = +params['id']; // (+) converts string 'id' to a numberthis.service.getHero(id).then(hero => this.hero = hero);});}
ngOnDestroy() {this.sub.unsubscribe();}