代码之家  ›  专栏  ›  技术社区  ›  KiraAG

功能模块中未提供注入令牌

  •  2
  • KiraAG  · 技术社区  · 6 年前

    我已经为rest端点配置创建了注入令牌,并在运行时为其提供了多个值。如果令牌是在appmodule中提供的,并在全局服务中使用,但如果我试图在功能模块中提供另一个数据并将其注入到功能效果文件中,我会得到staticinjectorerror,没有可用的提供程序。这是代码 Injection-token code

    1 回复  |  直到 6 年前
        1
  •  4
  •   Max Mumford    6 年前

    延迟加载模块提供的令牌在全局范围内不可访问;也就是说,它们仅在提供它们的同一模块中可用。

    要绕过此问题,您可以实现 static forRoot(): ModuleWithProviders 并将其导入根模块。这基本上允许您的功能模块在根目录中提供一些令牌,以便全局可用,而模块的其余部分将被延迟加载。

    下面是一个延迟加载功能模块的示例,该模块向全局范围提供注入令牌:

    @NgModule({
      ...
    })
    export class LazyLoadedFeatureModule {
    
      /**
       * Provide tokens to the global scope
       */
      static forRoot(): ModuleWithProviders {
        return {
          ngModule: LazyLoadedFeatureModule,
          providers: [
            { provide: MY_INJECTION_TOKEN, useValue: MyInjectionValue, multi: true },
          ]
        }
      }
    
    }
    

    在这里,它被导入到根模块中:

    @NgModule({
      ...
      imports: [
        LazyLoadedFeatureModule.forRoot(),
      ],
      ...
    })
    export class AppModule { }
    

    希望这有帮助。