来自延迟加载模块的 Angular 组件是否获取全局服务的副本?
Does Angular component from lazy loaded module gets copy of the global service?
Angular 文档我不确定我是否理解
Angular providers documentation 状态:
When the Angular router lazy-loads a module, it creates a new
injector. This injector is a child of the root application injector.
Imagine a tree of injectors; there is a single root injector and then
a child injector for each lazy loaded module. The router adds all of
the providers from the root injector to the child injector. When the
router creates a component within the lazy-loaded context, Angular
prefers service instances created from these providers to the service
instances of the application root injector.
Any component created within a lazy loaded module’s context, such as
by router navigation, gets the local instance of the service, not the
instance in the root application injector. Components in external
modules continue to receive the instance created for the application
root.
问题
这是否意味着当我在延迟加载模块中访问任何全局声明的提供程序时,我访问的是它的副本,它与在根注入器中创建的实例是分开的?
假设我有两种情况:
情况A
- 根模块
AppModule
- 提供
ProviderX
- 声明
AppComponent
- 注入
ProviderX
- 延迟加载模块
SubpageModule
- 无提供商
- 声明
SubpageComponent
- 注入
ProviderX
情况B
- 根模块
AppModule
- 提供
ProviderX
- 声明
AppComponent
- 注入
ProviderX
- 延迟加载模块
SubpageModule
- 提供
ProviderX
- 声明
SubpageComponent
- 注入
ProviderX
在情况 A 中,SubpageComponent
中 ProviderX
的实例与 AppComponent
中的实例相同还是不同?我了解在情况 B 中他们不是。
情况A
AppComponent 和 SubpageComponent 得到相同的实例注入
情况B
AppComponent 和 SubpageComponent 得到不同的实例注入
通过您的设置,您将获得一个注入器层次结构,例如
- AppModule
|- AppComponent
|- SubPageModule
|- SubpageComponent
Angular 从树结构中需要注入值的位置向上查找,直到找到第一个匹配的提供者。然后它注入第一个找到的提供者提供的实例。
Angular 文档我不确定我是否理解
Angular providers documentation 状态:
When the Angular router lazy-loads a module, it creates a new injector. This injector is a child of the root application injector. Imagine a tree of injectors; there is a single root injector and then a child injector for each lazy loaded module. The router adds all of the providers from the root injector to the child injector. When the router creates a component within the lazy-loaded context, Angular prefers service instances created from these providers to the service instances of the application root injector.
Any component created within a lazy loaded module’s context, such as by router navigation, gets the local instance of the service, not the instance in the root application injector. Components in external modules continue to receive the instance created for the application root.
问题
这是否意味着当我在延迟加载模块中访问任何全局声明的提供程序时,我访问的是它的副本,它与在根注入器中创建的实例是分开的?
假设我有两种情况:
情况A
- 根模块
AppModule
- 提供
ProviderX
- 声明
AppComponent
- 注入
ProviderX
- 注入
- 提供
- 延迟加载模块
SubpageModule
- 无提供商
- 声明
SubpageComponent
- 注入
ProviderX
- 注入
情况B
- 根模块
AppModule
- 提供
ProviderX
- 声明
AppComponent
- 注入
ProviderX
- 注入
- 提供
- 延迟加载模块
SubpageModule
- 提供
ProviderX
- 声明
SubpageComponent
- 注入
ProviderX
- 注入
- 提供
在情况 A 中,SubpageComponent
中 ProviderX
的实例与 AppComponent
中的实例相同还是不同?我了解在情况 B 中他们不是。
情况A
AppComponent 和 SubpageComponent 得到相同的实例注入
情况B
AppComponent 和 SubpageComponent 得到不同的实例注入
通过您的设置,您将获得一个注入器层次结构,例如
- AppModule
|- AppComponent
|- SubPageModule
|- SubpageComponent
Angular 从树结构中需要注入值的位置向上查找,直到找到第一个匹配的提供者。然后它注入第一个找到的提供者提供的实例。