Когда следует хранить экземпляры Subscription
и вызывать unsubscribe unsubscribe()
во время жизненного цикла NgOnDestroy, и когда я могу просто игнорировать их?
Сохранение всех подписей вводит много беспорядка в код компонента.
Руководство по HTTP-клиенту игнорирует подписки следующим образом:
getHeroes() {
this.heroService.getHeroes()
.subscribe(
heroes => this.heroes = heroes,
error => this.errorMessage = <any>error);
}
В то же время Руководство по маршрутизации и навигации говорит, что:
В конце концов, мы будем перемещаться в другом месте. Маршрутизатор удалит этот компонент из DOM и уничтожит его. Нам нужно очистить себя, прежде чем это произойдет. В частности, мы должны отказаться от подписки, прежде чем Angular уничтожит компонент. Несоблюдение этого требования может привести к утечке памяти.
Мы отказываемся от подписки на наш
Observable
в методеngOnDestroy
.
private sub: any;
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
let id = +params['id']; // (+) converts string 'id' to a number
this.service.getHero(id).then(hero => this.hero = hero);
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}