gpt4 book ai didi

angular - 在功能模块中导入 HttpClientModule

转载 作者:行者123 更新时间:2023-12-05 00:47:24 26 4
gpt4 key购买 nike

docsHttpClientModule 上说:

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 导入时,这是一个合适的用例吗?只有那几个?

最佳答案

所以,有两种方法可以在你的根模块中加载模块,

  1. 将其添加到导入数组中
  2. 延迟加载

现在,当您在导入数组中加载模块时,该模块提供的所有服务都将成为单例服务,也就是说,只有这些服务的单个实例将在整个应用程序中共享。 And the instance of those services are created by root injector ̷a̷t̷ ̷t̷h̷e̷ ̷t̷i̷m̷e̷ ̷o̷f̷ ̷b̷o̷o̷t̷s̷t̷r̷a̷p̷ ̷o̷f̷ ̷y̷o̷u̷r̷ ̷a̷p̷p̷l̷i̷c̷a̷t̷i̷o̷n̷ when these services first occurs.

在服务方面,无论是在根模块中加载一个模块还是在多个功能模块中加载,然后在根模块中加载所有这些功能模块,最终都会得到服务的单个实例。

但是,就您的声明而言,即组件、管道、指令。如果您想为其导出的组件使用 AModule,则必须在要在其中使用组件的功能模块中加载 AModule。

但是,您可以查看 HttpClientModule source_code .声明或导出数组中没有任何内容。它只提供服务,因此无论您是在功能模块中加载它(同时在根模块的导入数组中加载功能模块),还是在根模块中,您都将获得它的服务。因此,只需将其加载到根模块中即可。

现在当你使用延迟加载来加载一个特性模块时,延迟加载的模块确实获得了根模块中所有其他模块提供的所有服务,但它有自己的注入(inject)器,这意味着如果你在延迟加载 HttpClientModule已加载到根模块中的已加载模块,您最终会得到 HttpClientModule 提供的所有服务的两个实例,而您不希望这样。

您可以进一步阅读有关 forRoot 和 forChild 模式的更多信息来解决此类情况。

关于angular - 在功能模块中导入 HttpClientModule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57187673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com