angular 在延迟加载模块时是否创建了 2 个服务实例
Does angular creating a 2 instances of service while Lazy loading the modules
在 Angular docs 中提到,在延迟加载模块中,组件获取服务的本地实例而不是根级实例。其他模块的组件正在使用根级实例。这是否意味着当我们使用延迟加载时它会创建 2 个实例?
案例是:
我们有根模块 AppModule,我们在其中创建了一个服务 (ServiceA) 并在根级别注入,但现在我们不将此服务提供给 AppModule 的提供者[],仅像这样:
进口:[
浏览器模块,
RouterModule.forRoot(路线)
],
供应商:[],
现在在我的延迟加载模块中,我必须使用相同的服务 (ServiceA),只需将它导入延迟加载模块的某个组件即可。
问题:这是否会在惰性加载模块中创建一个单独的服务实例(ServiceA)?
答:理想情况下它应该只创建一个实例,
但是由于这条线我很困惑
请帮助我理解这一点。
根据您的描述,
- 您没有在模块的提供程序数组中明确定义服务。
- 因此,只要您的服务有
@Injectable() ({ providedIn: 'Root' })
装饰器,您的根应用程序和延迟加载的应用程序就会有相同的服务实例。
如文档中所定义,如果您开始为特定模块或组件指定提供程序,这就是您可以实现多个实例的方式
它将创建一个单独的实例。
您可以通过在构建时设置一个具有唯一值的 属性 并在每个惰性加载模块的 init 上记录它来测试它。值不会一样。
查看此答案以获得可能的解决方案:
在 Angular docs 中提到,在延迟加载模块中,组件获取服务的本地实例而不是根级实例。其他模块的组件正在使用根级实例。这是否意味着当我们使用延迟加载时它会创建 2 个实例?
案例是:
我们有根模块 AppModule,我们在其中创建了一个服务 (ServiceA) 并在根级别注入,但现在我们不将此服务提供给 AppModule 的提供者[],仅像这样: 进口:[ 浏览器模块, RouterModule.forRoot(路线) ], 供应商:[],
现在在我的延迟加载模块中,我必须使用相同的服务 (ServiceA),只需将它导入延迟加载模块的某个组件即可。
问题:这是否会在惰性加载模块中创建一个单独的服务实例(ServiceA)? 答:理想情况下它应该只创建一个实例,
但是由于这条线我很困惑
请帮助我理解这一点。
根据您的描述,
- 您没有在模块的提供程序数组中明确定义服务。
- 因此,只要您的服务有
@Injectable() ({ providedIn: 'Root' })
装饰器,您的根应用程序和延迟加载的应用程序就会有相同的服务实例。
如文档中所定义,如果您开始为特定模块或组件指定提供程序,这就是您可以实现多个实例的方式
它将创建一个单独的实例。
您可以通过在构建时设置一个具有唯一值的 属性 并在每个惰性加载模块的 init 上记录它来测试它。值不会一样。
查看此答案以获得可能的解决方案: