Программная регистрация компонента для уничтожения? - PullRequest
0 голосов
/ 19 декабря 2018

Если мы реализуем OnDestroy, то Angular вызывает ngOnDestroy для компонента, когда он уничтожается.

Можно ли программно зарегистрировать компонент для уничтожения в Angular из самого компонента (в рамках реализации OnDestroy?

Основной вариант использования, который я имею в виду, заключается в изменении ngx-take-before-destroy таким образом, чтобы компоненту не пришлось реализовывать OnDestroy для использования оператора.

Если компонент реализует OnDestroy, то оператор может просто проксировать этот метод, но если это не так, оператор может зарегистрировать компонент, чтобы метод OnDestroy вызывался из Angular.

Это избавит от крошечного кусочка.

1 Ответ

0 голосов
/ 19 декабря 2018

Если мы реализуем 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 также может повлиять на результат этого.Возможно, для этого была добавлена ​​дополнительная проверка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...