Импорт HttpClientModule в функциональные модули

документы на HttpClientModule говорят:

Before you can use the HttpClientModule, you need to import the Angular HttpClientModule. Most apps do so in the root AppModule.

  1. В каких случаях мы хотим импортировать HttpClientModule в функциональные модули?
  2. Что произойдет, если мы импортируем его в несколько функциональные модули, которые, в свою очередь, внедряются в корневой модуль?
  3. Является ли это правильным вариантом использования, когда у нас есть десятки модулей в приложении, некоторым из которых требуется HttpClientModule, и мы хотели бы импортировать HttpClientModule только в эти несколько модулей?
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
0
1 610
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, есть два способа загрузки модулей в корневой модуль:

  1. Добавление его в массив импорта
  2. Ленивая загрузка

Теперь, когда вы загружаете модуль в массив импорта, все службы, предоставляемые этим модулем, становятся одноэлементными службами, то есть только один экземпляр этих служб будет использоваться в вашем приложении. И экземпляр этих услуг создаются корневым инжектором ̷a̷t̷ ̷t̷h̷e̷ ̷t̷i̷m̷e̷ ̷o̷f̷ ̷b̷o̷o̷t̷s̷t̷r̷a̷o̷t̷s̷t̷r̷a̷̷̷t̷s̷t̷r̷a̷w̷ ̷o̷f̷ ̷y̷o̷u̷r̷ ̷a̷p̷p̷l̷i̷c̷a̷t̷i̷̷n̷, когда эти услуги впервые возникают.

С точки зрения служб, не имеет значения, загружаете ли вы модуль в корневой модуль или несколько функциональных модулей, а затем загружаете все эти функциональные модули в свой корневой модуль, в итоге вы получите отдельные экземпляры служб.

Но с точки зрения ваших объявлений, то есть компонентов, каналов, директив. Если вы хотите использовать AModule для компонентов, которые он экспортирует, вам придется загрузить AModule в функциональный модуль, в котором вы хотите использовать компоненты.

Но вы можете посмотреть HttpClientModule исходный код. в массиве объявлений или экспорта ничего нет. Он предоставляет только услуги, поэтому не имеет значения, загружаете ли вы его в свой функциональный модуль (при загрузке функционального модуля в массив импорта корневого модуля) или в корневой модуль, вы получите его услуги в любом случае. Итак, просто загрузите его в корневой модуль.

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

Вы можете узнать больше о шаблонах forRoot и forChild для решения таких ситуаций.

Хороший ответ! Всего лишь небольшая ошибка: «эти сервисы создаются корневым инжектором во время начальной загрузки вашего приложения» — сервисы создаются при первом появлении. Это могу будет временем начальной загрузки, но мог также будет в более позднее время (например, когда лениво загруженная страница сначала запрашивает службу, и она не использовалась раньше).

pascalpuetz 24.07.2019 21:51

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