Должны ли переменные компонента Angular иметь значение null в ngOnDestroy()?
Ангулярная документация гласит
ngOnDestroy(): Очистка перед тем, как Angular уничтожит директиву / компонент. Отмените подписку Observables и отсоедините обработчики событий, чтобы избежать утечек памяти. Вызывается непосредственно перед тем, как Angular уничтожит директиву / компонент.
Некоторые разработчики говорят, что свойства компонента (переменные класса) также должны быть равны нулю, чтобы избежать утечек памяти. Это правда?
export class TestComponent implements OnInit, OnDestroy {
public name: string;
constructor() { }
ngOnInit() {
this.name = 'John';
}
ngOnDestroy() {
// is this code really necessary.
this.name = null;
}
}
2 ответа
Нет, тебе это не нужно. Компонент просто является классом, и когда он отображается, создается экземпляр. Когда компонент уничтожается, связанный объект остается без ссылки, и при первой возможности он будет собираться мусором.
Как сказано в документации, вам нужно использовать только в тех случаях с Observables и обработчиками событий, поскольку они не будут удалены с помощью сборщика мусора, если они находятся в активном состоянии.
Отмените подписку Observables и отсоедините обработчики событий, чтобы избежать утечек памяти
Да, вам нужно это сделать. Я столкнулся с той же проблемой, когда сохранял данные в переменной и вызывал ее при переключении между разными дочерними компонентами.
Компонент в надежде, что он будет автоматически удален, но этого не произошло, данные не удалялись из этой переменной, поэтому присвойте ему значение null вngOnDestroy
помог мне.
ngOnDestroy(){ this.home=null;}