在功能模块中导入 HttpClientModule
Importing HttpClientModule in feature modules
HttpClientModule
上的 docs 说:
Before you can use the HttpClientModule, you need to import the Angular
HttpClientModule. Most apps do so in the root AppModule.
- 在这种情况下我们要将
HttpClientModule
导入
功能模块?
- 如果我们将它导入多个会发生什么
功能模块又被导入到根模块中?
- 当我们在一个应用程序中有几十个模块时,这是否是一个合适的用例,其中一些模块需要
HttpClientModule
,而我们只想将 HttpClientModule
导入到那几个模块中?
因此,有两种方法可以在根模块中加载模块,
- 将其添加到导入数组中
- 延迟加载
现在,当您在 imports 数组中加载一个模块时,该模块提供的所有服务都将成为单例服务,也就是说,这些服务的单个实例将在整个应用程序中共享。这些服务的实例是由根喷油器̷a̷t̷t̷h̷e̷t̷h̷e̷t̷i̷t̷i̷m̷e̷o̷o̷f̷b̷b̷o̷o̷o̷t̷s̷o̷t̷s̷o̷t̷a̷p̷pr̷a̷o̷o̷1o̷o̷y̷yy̷yy̷o̷o̷o̷o̷u̷u̷u̷u̷u̷u̷u̷u̷a̷a̷a̷a̷a̷pp̷p̷p̷p̷p̷p̷p̷p̷p̷p̷c̷c̷a̷ten= 11 =
在服务方面,无论是在根模块中加载一个模块还是在多个功能模块中加载模块,然后在根模块中加载所有这些功能模块,最终都会得到服务的单个实例.
但是,就您的声明而言,即组件、管道、指令。如果要将 AModule 用于其导出的组件,则必须在要使用组件的功能模块中加载 AModule。
但是,您可以查看 HttpClientModule source_code。声明或导出数组中没有任何内容。它只提供服务,所以不管你是在你的特性模块中加载它(同时在根模块的导入数组中加载特性模块),还是在根模块中,你都会以任何一种方式获得它的服务。所以,只需将它加载到根模块中即可。
现在当你使用延迟加载来加载一个功能模块时,延迟加载的模块确实获得了根模块中所有其他模块提供的所有服务,但它有自己的注入器,这意味着如果你加载 HttpClientModule延迟加载的模块已经加载到根模块中,您最终将得到 HttpClientModule 提供的所有服务的两个实例,而您不希望这样。
您可以进一步阅读有关 forRoot 和 forChild 模式的更多信息来解决此类情况。
HttpClientModule
上的 docs 说:
Before you can use the HttpClientModule, you need to import the Angular HttpClientModule. Most apps do so in the root AppModule.
- 在这种情况下我们要将
HttpClientModule
导入 功能模块? - 如果我们将它导入多个会发生什么 功能模块又被导入到根模块中?
- 当我们在一个应用程序中有几十个模块时,这是否是一个合适的用例,其中一些模块需要
HttpClientModule
,而我们只想将HttpClientModule
导入到那几个模块中?
因此,有两种方法可以在根模块中加载模块,
- 将其添加到导入数组中
- 延迟加载
现在,当您在 imports 数组中加载一个模块时,该模块提供的所有服务都将成为单例服务,也就是说,这些服务的单个实例将在整个应用程序中共享。这些服务的实例是由根喷油器̷a̷t̷t̷h̷e̷t̷h̷e̷t̷i̷t̷i̷m̷e̷o̷o̷f̷b̷b̷o̷o̷o̷t̷s̷o̷t̷s̷o̷t̷a̷p̷pr̷a̷o̷o̷1o̷o̷y̷yy̷yy̷o̷o̷o̷o̷u̷u̷u̷u̷u̷u̷u̷u̷a̷a̷a̷a̷a̷pp̷p̷p̷p̷p̷p̷p̷p̷p̷p̷c̷c̷a̷ten= 11 =
在服务方面,无论是在根模块中加载一个模块还是在多个功能模块中加载模块,然后在根模块中加载所有这些功能模块,最终都会得到服务的单个实例.
但是,就您的声明而言,即组件、管道、指令。如果要将 AModule 用于其导出的组件,则必须在要使用组件的功能模块中加载 AModule。
但是,您可以查看 HttpClientModule source_code。声明或导出数组中没有任何内容。它只提供服务,所以不管你是在你的特性模块中加载它(同时在根模块的导入数组中加载特性模块),还是在根模块中,你都会以任何一种方式获得它的服务。所以,只需将它加载到根模块中即可。
现在当你使用延迟加载来加载一个功能模块时,延迟加载的模块确实获得了根模块中所有其他模块提供的所有服务,但它有自己的注入器,这意味着如果你加载 HttpClientModule延迟加载的模块已经加载到根模块中,您最终将得到 HttpClientModule 提供的所有服务的两个实例,而您不希望这样。
您可以进一步阅读有关 forRoot 和 forChild 模式的更多信息来解决此类情况。