延迟加载的模块中的Angular组件是否获取全局服务的副本?

Rob*_*ier 3 angular-providers angular

角文档我不知道如果我理解

Angular 提供程序文档指出:

当Angular路由器延迟加载模块时,它将创建一个新的注入器。这种注射器是根应用注射器的孩子。想象一棵注入器树;每个懒加载模块有一个根注入器,然后有一个子注入器。路由器将所有提供程序从根注入器添加到子注入器。当路由器在延迟加载的上下文中创建组件时,Angular首选从这些提供者创建的服务实例,而不是应用程序根注入器的服务实例。

在延迟加载的模块上下文中创建的任何组件(例如通过路由器导航)都将获取服务的本地实例,而不是根应用程序注入器中的实例。外部模块中的组件继续接收为应用程序根目录创建的实例。

这是否意味着当我在延迟加载的模块中访问任何全局声明的提供程序时,便会访问它的副本,该副本与在根注入器中创建的实例是分开的?

假设我有2种情况:

情况A

  • 根模块 AppModule
    • 提供 ProviderX
    • 宣布 AppComponent
      • 注入 ProviderX
  • 延迟加载的模块 SubpageModule
    • 没有提供者
    • 宣布 SubpageComponent
      • 注入 ProviderX

情况B

  • 根模块 AppModule
    • 提供 ProviderX
    • 宣布 AppComponent
      • 注入 ProviderX
  • 延迟加载的模块 SubpageModule
    • 提供 ProviderX
    • 宣布 SubpageComponent
      • 注入 ProviderX

在情况A中,ProviderXin 的实例与in 的实例SubpageComponent相同AppComponent还是不同?我了解情况B中的情况并非如此。

Gün*_*uer 5

情况A

AppComponent和SubpageComponent获得相同的实例注入

情况B

AppComponent和SubpageComponent获得注入的不同实例

通过您的设置,您将获得喷射器层次结构,例如

- AppModule
 |- AppComponent
 |- SubPageModule
   |- SubpageComponent
Run Code Online (Sandbox Code Playgroud)

从需要向上插入树结构的值的位置进行角度搜索,直到找到第一个匹配的提供程序为止。然后,它注入第一个找到的提供程序提供的实例。