如何从应用程序模块配置或传递环境变量到Angular库?
如何从应用程序模块配置或传递环境变量到Angular库?
我有一个Angular库,调用后端Java API。我想通过导入该库的Angular应用程序模块,在该库中配置API URL的能力。
我尝试在库中使用forRoot()
,但我的应用程序在运行时出现以下错误,因为我的应用程序模块是懒加载的:
ERROR Error: \"StaticInjectorError[FeatureComponent -> Service]: StaticInjectorError(AppModule)[HttpClient]: StaticInjectorError(Platform: core)[HttpClient]: NullInjectorError: No provider for HttpClient!\"
以下是代码库片段 -
export class LibModule { constructor(injector: Injector) { setLibInjector(injector); } public static forRoot(environment: any): ModuleWithProviders { return { ngModule: LibModule, providers: [ { provide: 'appEnv', // use InjectionToken useValue: environment } ] }; } }
以下是我导入该库的应用程序中的模块之一 -
@NgModule({ declarations: [ ], imports: [ LibModule.forChild({baseUrl: '/configuration/'}), ], entryComponents: [], providers: [] }) export class FeatureModule { }
注意:
我想知道如何编写一个库,以从任何类型的Angular模块(急切加载或懒加载)接受配置参数。有人将此问题标记为重复问题。
admin 更改状态以发布 2023年5月21日
假设您希望在XyzService
中使用environment
,而它位于您的LibModule
中。
App.module.ts
imports: [ BrowserModule, LibModule.forRoot({ environment: environment }) ]
LibModule.module.ts
export class LibModule{ static forRoot(environment): ModuleWithProviders { console.log(environment); return { ngModule: LibModule, providers: [XyzService,{provide: 'config', useValue: environment}] }; } }
XyzService.service :
export class XyzService{ constructor(@Inject('config') private config:any) { console.log(config) } }