Если мы реализуем OnDestroy
, то Angular вызывает компонент ngOnDestroy
при его уничтожении.
Учитывая, что OnDestroy
является интерфейсом TypeScript, он не передается вскомпилированный вывод JavaScript.Поэтому я ожидаю, что простое существование функции ngOnDestroy
достаточно для вызова Angular.Не имеет значения, если OnDestroy
«реализовано» в классе.
Можно ли программно зарегистрировать компонент для уничтожения в Angular из самого компонента (в рамках реализации OnDestroy
?
В Angular компоненты не зарегистрированы для уничтожения. Не следует рассматривать ngOnDestroy
как какую-либо форму сборки мусора или деструктор. ngOnDestroy
вызывается всякий раз, когда удаляется Component
из DOM.
Основной вариант использования, который я имею в виду, заключается в изменении ngx-take-till-destroy так, чтобы компонент не должен был реализовывать OnDestroy
для того, чтобыиспользовать оператор.
Главное неизвестно, когда Angular проверяет наличие ngOnDestroy
. Если он проверяет прямо перед вызовом, то в ngx-take-till-destroy просто снимает проверкуесли функция ngOnDestroy
уже присутствует, то достаточно.
Если Angular проверяет раньше, то, боюсь, пустое значение ngOnDestroy
является необходимостью.
Я попытался найти соответствующий код уничтожения в репозитории Angular.Но нашел только результаты по уничтожению провайдеров.Я думаю, что самый простой способ понять это - просто попытаться.
РЕДАКТИРОВАТЬ : основываясь на истории проекта.Кажется, ng build --prod
также может повлиять на результат этого.Возможно, для этого была добавлена дополнительная проверка.