我需要将配置(对象数组)发送到功能模块中的服务,并且需要动态计算此配置。我用过forRoot
,它工作得很好,直到我用--aot
.
问题:使用--aot
,配置结果为undefined
。
这是我在 stackblitz 上制作的示例的链接: https ://stackblitz.com/edit/angular-aot-forroot-error
!!它可以在 stackblitz 上按需要工作,因为它不是用 aot 构建的!但是,如果您使用 aot 在本地构建它,GetConfigService
则会引发错误,因为config
它是未定义的。
重要部分:
应用模块:
export const config = [
{
id: 'first'
},
{
id: 'second'
}
];
// just illustrative modification (in my project I need to modify config based on environment)
export function modifyConfig(config) {
return config.map(c => c.id === 'first' ? {...c, default: true} : c);
}
const configModified = modifyConfig(config);
@NgModule({
imports: [
BrowserModule,
WithParametersdModule.forRoot(configModified)
],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
WithParametersdModule:
@NgModule()
export class WithParametersdModule {
static forRoot(config) {
return {
ngModule: WithParametersdModule,
providers: [
{
provide: SOME_CONFIG,
useValue: config
},
GetConfigService
]
}
}
}
获取配置服务:
@Injectable()
export class GetConfigService {
constructor(@Inject(SOME_CONFIG) private config) {}
get configObj() {
if (!this.config) {
throw `config: ${this.config}`;
}
return this.config;
}
}
感谢您的帮助或解释我做错了什么。