документы на HttpClientModule говорят:
Before you can use the HttpClientModule, you need to import the Angular HttpClientModule. Most apps do so in the root AppModule.
HttpClientModule в
функциональные модули?HttpClientModule, и мы хотели бы импортировать HttpClientModule только в эти несколько модулей?




Итак, есть два способа загрузки модулей в корневой модуль:
Теперь, когда вы загружаете модуль в массив импорта, все службы, предоставляемые этим модулем, становятся одноэлементными службами, то есть только один экземпляр этих служб будет использоваться в вашем приложении. И экземпляр этих услуг создаются корневым инжектором ̷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 для решения таких ситуаций.
Хороший ответ! Всего лишь небольшая ошибка: «эти сервисы создаются корневым инжектором во время начальной загрузки вашего приложения» — сервисы создаются при первом появлении. Это могу будет временем начальной загрузки, но мог также будет в более позднее время (например, когда лениво загруженная страница сначала запрашивает службу, и она не использовалась раньше).