Угловая подписка в компоненте ngOnInit

Я изучаю Angular 5+ и недавно перешел к теме / подписке, я вижу, что многие учебники хотели бы использовать подписку определенным образом:

  1. Объявите подписку в компоненте
  2. Подписывай его в ngOnInit через тему сервиса или ngrx/store
  3. Отпишись в нгОнДестрой

Однако я не уверен, нужно ли нам подписываться / отписываться от каждой подписки в компонентах в ngOnInit и ngOnDestroy. Например, если моя подписка будет обновлена ​​через событие нажатия кнопки, какой план мне подписать в моем компоненте?

  1. Только ngOnInit
  2. Только событие нажатия кнопки
  3. И ngOnInit, и событие нажатия кнопки

Почему мы всегда подписываемся на подписку в ngOnInit? NgOnInit будет похож на Page_Load в жизненном цикле страницы, поэтому он будет вызываться только один раз в самый первый раз, и если так, то при каждом обновлении подписки будет запускаться ngOnInit снова и снова? Если это так, будет ли загружаться мой компонент снова и снова, что может вызвать проблемы с производительностью в больших приложениях?

1 ответ

Решение

Обычно вы помещаете Observables для подписки внутри Сервиса и делаете их доступными через методы получения и установки.

При подписке на Observable он ведет себя определенным образом, как EventListener. Всякий раз, когда объект внутри Observable изменяется, запускается событие, и ваш код внутри подписки исполняется. Кроме того, вам предоставляется обновленный объект.

Даже если вы инициируете подписку внутри ngOnInit, это не приведет к перезагрузке всего вашего компонента при поступлении обновления. Только те части, которые обновляются вашим кодом внутри подписки.

Вам не нужно размещать подписку внутри ngOnInit(). Это зависит от того, чего вы хотите достичь в компоненте. Но большую часть времени вы хотите загружать и отображать данные непосредственно при доступе к компоненту и обновлять пользовательский интерфейс при изменении этих данных. Вот почему рекомендуется размещать подписку в ngOnInit().

Другие вопросы по тегам