我在我的应用程序中使用了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(原始.ts文件中的位置24:46),在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 } ], ... })
如上所述,构建仍然会失败并出现相同的错误.后续构建工作正常.
如何解决此初始构建错误?
将内联闭包移动到一个函数:
function loadContext(context: ContextService) { return () => context.load(); } @NgModule({ ... providers: [ ..., ContextService, { provide: APP_INITIALIZER, useFactory: loadContext, deps: [ContextService], multi: true } ], ... })
另请参见如何将从后端呈现的参数传递给angular2 bootstrap方法