6

我创建了两个 Angular 库,一个将另一个作为依赖项。

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

例如,假设我们有TopLevelLib,它OtherLib作为依赖项。OtherLib 需要使用 forRoot 传递一个配置对象。

最终用户的 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 将配置相同的数据。

关于如何实现这一点的任何想法?

4

2 回答 2

0

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

于 2018-12-28T09:56:06.390 回答
0

您可以forRoot输入参数。您已经明确定义了OtherLibhasconfig: ConfigObj作为参数 - 这意味着TopLevelLib需要使用ConfigObj. 所以*****what goes in here?*****评论的答案是: 的一个实例ConfigObj

编辑:评论后,您似乎想传递一些配置值。你可以这样做:

export class TopLevelLib {
  static forRoot(config: ConfigObj): ModuleWithProviders {
    return {
      ngModule: SampleModule,
      providers: [{ provide: ConfigObj, useValue: config }]
    };
  }
}

然后OtherLib可以使用 Injector 得到这个:

class OtherLib {
  constructor(@Inject() ConfigObj) {}
...
于 2018-12-19T08:52:59.160 回答