使用“ forRoot”将配置数据传递到角度库的依赖项

时间:2018-12-19 07:58:42

标签: angular angular-library angular-dependency-injection

我已经创建了两个Angular库,一个库具有另一个依赖项。

需要使用forRoot方法配置依赖项。 如何将配置数据从父库传递给它的依赖项?

例如,假设我们有TopLevelLib,其中有OtherLib作为依赖项。需要使用forRoot将OtherLib传递给配置对象。

最终用户的AppModule,导入到

@NgModule({
  imports: [
    TopLevelLib.forRoot(someConfigData)
  ],
  declarations: [...],
  exports: [...]
})
export class AppModule { }

TopLevelLib-最终用户导入到AppModule

@NgModule({
  imports: [
    ...
    OtherLib.forRoot(*****what goes in here?*****)
  ],
  declarations: [...],
  exports: [...]
})
export class TopLevelLib {
  static forRoot(config: ConfigObj): ModuleWithProviders {
    return {
      ngModule: SampleModule,
      providers: [{ provide: SomeInjectionToken, useValue: config }]
    };
  }
}

OtherLib-由TopLevelLib导入

@NgModule({
  imports: [...],
  declarations: [...],
  exports: [...]
})
export class OtherLib {
  static forRoot(config: ConfigObj): ModuleWithProviders {
    return {
      ngModule: SampleModule,
      providers: [{ provide: SomeInjectionToken, useValue: config }]
    };
  }
}

我需要的是将配置对象实例从TopLevelLib传递给OtherLib。这样,当最终用户使用forRoot配置TopLevelLib时,OtherLib将被配置相同的数据。

关于如何实现此目标的任何想法?

2 个答案:

答案 0 :(得分:0)

您可以输入UI参数。您已明确定义forRoot具有OtherLib作为参数-这意味着config: ConfigObj需要使用TopLevelLib的实例对其进行配置。因此,ConfigObj评论的答案是:*****what goes in here?*****的实例。

编辑:发表评论后,您似乎想传递一些配置值。您可以这样操作:

ConfigObj

然后export class TopLevelLib { static forRoot(config: ConfigObj): ModuleWithProviders { return { ngModule: SampleModule, providers: [{ provide: ConfigObj, useValue: config }] }; } } 可以使用Injector来获取此信息:

OtherLib

答案 1 :(得分:0)

最终,我找到了一个很好的解决方案。 我已经公开了服务使用的注入令牌(在上面的示例中,OtherLib),将其导入TopLevelLib模块,并使用forRoot配置将其提供给模块实例。