我有一个角度库,它调用后端Java api。我希望能够通过导入库的角度应用程序模块在库中配置api网址。
我尝试在库中使用Dictionary::load
,但是我的应用程序给出了以下运行时错误,因为我的应用程序模块延迟加载-
错误错误:“ StaticInjectorError [FeatureComponent-> Service]:StaticInjectorError(AppModule)[HttpClient]:StaticInjectorError(Platform:core)[HttpClient]:NullInjectorError:HttpClient没有提供者!”
下面是代码库摘要-
forRoot()
以下是我导入库的应用程序中的模块之一-
export class LibModule {
constructor(injector: Injector) {
setLibInjector(injector);
}
public static forRoot(environment: any): ModuleWithProviders {
return {
ngModule: LibModule,
providers: [
{
provide: 'appEnv', // use InjectionToken
useValue: environment
}
]
};
}
}
注意 我想知道如何编写库以接受任何角度模块(急切或延迟加载)的配置参数。有人将此问题标记为重复。
答案 0 :(得分:0)
我遇到了同样的问题,我的临时解决方案是将环境变量@Input()
传递给库的组件。
注意:我最近开始构建库。我不是专家。
答案 1 :(得分:0)
假设您想在LibModule
中使用environment
中的XyzService
,
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)
}
}