Angular 在功能模块中导入HttpClientModule
HttpClientModule上的Angular 在功能模块中导入HttpClientModule,angular,angular-httpclient,angular-module,Angular,Angular Httpclient,Angular Module,HttpClientModule上的 在使用HttpClientModule之前,需要导入 HttpClientModule。大多数应用程序在根AppModule中执行此操作 在哪些情况下,我们希望将HttpClientModule导入到 功能模块 如果我们将其导入多个 功能模块,而这些功能模块又被放入根模块中 当我们在一个应用程序中有几十个模块,其中一些需要HttpClientModule,并且我们只想将HttpClientModule导入到这些模块中时,这是一个合适的使用案例吗 因此,有两种
在使用HttpClientModule之前,需要导入
HttpClientModule。大多数应用程序在根AppModule中执行此操作
在哪些情况下,我们希望将HttpClientModule
导入到
功能模块
如果我们将其导入多个
功能模块,而这些功能模块又被放入根模块中
当我们在一个应用程序中有几十个模块,其中一些需要HttpClientModule
,并且我们只想将HttpClientModule
导入到这些模块中时,这是一个合适的使用案例吗
因此,有两种方法可以在根模块中加载模块
将其添加到导入数组中
延迟加载
现在,当您在imports数组中加载一个模块时,该模块提供的所有服务都将成为单例服务,也就是说,只有这些服务的单个实例将在整个应用程序中共享。这些服务的实例是在应用程序引导时由根注入器创建的
就服务而言,无论您是在根模块中加载一个模块还是在多个功能模块中加载,然后在根模块中加载所有这些功能模块,最终都会得到单个服务实例
但是,就您的声明而言,即组件、管道和指令。如果要为其导出的组件使用AModule,则必须在要使用组件的功能模块中加载AModule
但是,您可以查看HttpClientModule。声明或导出数组中没有任何内容。它只提供服务,所以无论您是在功能模块中加载它(同时在根模块的导入数组中加载功能模块),还是在根模块中加载它,您都可以通过任何一种方式获得它的服务。因此,只需将其加载到根模块中
现在,当您使用延迟加载来加载功能模块时,延迟加载的模块确实会获得根模块中所有其他模块提供的所有服务,但它有自己的注入器,这意味着如果您在延迟加载的模块中加载HttpClientModule,而该模块已经加载到根模块中,您将得到HttpClientModule提供的所有服务的两个实例,您不希望这样
您可以进一步阅读有关forRoot和forChild模式的更多信息,以解决此类情况。回答得不错!只是一个小错误:“这些服务是在应用程序引导时由根注入器创建的”——这些服务是在第一次出现时创建的。这可能是引导的时间,但也可能是以后的时间(例如,延迟加载的页面首先请求服务,而之前没有使用该服务)。