我在我的应用程序中使用了APP_INITIALIZER,并在app.module.ts中设置了如下所示的必要导入:
@NgModule({
...
providers: [ ..., ContextService, { provide: APP_INITIALIZER, useFactory: (context: ContextService) => () => context.load(), deps: [ContextService], multi: true } ],
...
})
当我构建新的(ng build -watch)时,我得到以下错误,后续版本正常工作。
ERROR in Error遇到静态解析符号值。 不支持函数调用。考虑更换功能或 lambda引用了一个导出函数(位置24:46) 原始.ts文件),解决C:/.../ app.module.ts中的符号AppModule
我尝试将() => context.load()
移动到同一文件中的导出函数中:
export function loadContext(context: ContextService) {
return () => context.load();
}
...然后改变了@NgModule的提供者部分:
@NgModule({
...
providers: [ ..., ContextService, { provide: APP_INITIALIZER, useFactory: (context: ContextService) => loadContext(context), deps: [ContextService], multi: true } ],
...
})
如上所述,构建仍然失败并出现相同的错误。后续构建工作正常。
如何解决此初始构建错误?
答案 0 :(得分:7)
将内联闭包移动到函数:
function loadContext(context: ContextService) {
return () => context.load();
}
@NgModule({
...
providers: [ ..., ContextService, { provide: APP_INITIALIZER, useFactory: loadContext, deps: [ContextService], multi: true } ],
...
})
另见How to pass parameters rendered from backend to angular2 bootstrap method