Angular 在功能模块中导入HttpClientModule

Angular 在功能模块中导入HttpClientModule,angular,angular-httpclient,angular-module,Angular,Angular Httpclient,Angular Module,HttpClientModule上的 在使用HttpClientModule之前,需要导入 HttpClientModule。大多数应用程序在根AppModule中执行此操作 在哪些情况下,我们希望将HttpClientModule导入到 功能模块 如果我们将其导入多个 功能模块,而这些功能模块又被放入根模块中 当我们在一个应用程序中有几十个模块,其中一些需要HttpClientModule,并且我们只想将HttpClientModule导入到这些模块中时,这是一个合适的使用案例吗 因此,有两种

HttpClientModule上的

在使用HttpClientModule之前,需要导入 HttpClientModule。大多数应用程序在根AppModule中执行此操作

  • 在哪些情况下,我们希望将
    HttpClientModule
    导入到 功能模块
  • 如果我们将其导入多个 功能模块,而这些功能模块又被放入根模块中
  • 当我们在一个应用程序中有几十个模块,其中一些需要
    HttpClientModule
    ,并且我们只想将
    HttpClientModule
    导入到这些模块中时,这是一个合适的使用案例吗

  • 因此,有两种方法可以在根模块中加载模块

  • 将其添加到导入数组中
  • 延迟加载
  • 现在,当您在imports数组中加载一个模块时,该模块提供的所有服务都将成为单例服务,也就是说,只有这些服务的单个实例将在整个应用程序中共享。这些服务的实例是在应用程序引导时由根注入器创建的

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

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

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

    现在,当您使用延迟加载来加载功能模块时,延迟加载的模块确实会获得根模块中所有其他模块提供的所有服务,但它有自己的注入器,这意味着如果您在延迟加载的模块中加载HttpClientModule,而该模块已经加载到根模块中,您将得到HttpClientModule提供的所有服务的两个实例,您不希望这样


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

    回答得不错!只是一个小错误:“这些服务是在应用程序引导时由根注入器创建的”——这些服务是在第一次出现时创建的。这可能是引导的时间,但也可能是以后的时间(例如,延迟加载的页面首先请求服务,而之前没有使用该服务)。