angular 在延迟加载模块时是否创建了 2 个服务实例

Does angular creating a 2 instances of service while Lazy loading the modules

Angular docs 中提到,在延迟加载模块中,组件获取服务的本地实例而不是根级实例。其他模块的组件正在使用根级实例。这是否意味着当我们使用延迟加载时它会创建 2 个实例?

案例是:

  1. 我们有根模块 AppModule,我们在其中创建了一个服务 (ServiceA) 并在根级别注入,但现在我们不将此服务提供给 AppModule 的提供者[],仅像这样: 进口:[ 浏览器模块, RouterModule.forRoot(路线) ], 供应商:[],

  2. 现在在我的延迟加载模块中,我必须使用相同的服务 (ServiceA),只需将它导入延迟加载模块的某个组件即可。

问题:这是否会在惰性加载模块中创建一个单独的服务实例(ServiceA)? 答:理想情况下它应该只创建一个实例,

但是由于这条线我很困惑

请帮助我理解这一点。

根据您的描述,

  • 您没有在模块的提供程序数组中明确定义服务。
  • 因此,只要您的服务有 @Injectable() ({ providedIn: 'Root' }) 装饰器,您的根应用程序和延迟加载的应用程序就会有相同的服务实例。

如文档中所定义,如果您开始为特定模块或组件指定提供程序,这就是您可以实现多个实例的方式

它将创建一个单独的实例。

您可以通过在构建时设置一个具有唯一值的 属性 并在每个惰性加载模块的 init 上记录它来测试它。值不会一样。

查看此答案以获得可能的解决方案: