尝试在Angular 8中构建产品时遇到麻烦。错误是
在“ AppModule”模板编译期间发生错误ERROR 'SocketLibModule'中的装饰器不支持函数表达式 'SocketLibModule'引用'initializeApp' 'initializeApp'包含位于../socket-lib/src/lib/socket-lib.module.ts(9,12)的错误 考虑将函数表达式更改为导出的函数。
什么指向我的库
export const SOCKET_CONFIG = new InjectionToken<SocketConfig>('SOCKET_CONFIG');
export function initializeApp(socketConfig: SocketConfig) {
return (uriConfig: any) => {
return () => uriConfig.load(socketConfig);
};
}
@NgModule()
export class SocketLibModule {
public static forRoot(socketConfig: SocketConfig): ModuleWithProviders {
return {
ngModule: SocketLibModule,
providers: [
{
provide: SOCKET_CONFIG,
useValue: socketConfig
},
{
provide: APP_INITIALIZER,
useFactory: initializeApp(socketConfig),
deps: [ConfigInitService, HttpClientModule],
multi: true
},
HttpClientModule
]
};
}
}
错误点(9,12)仅在打开括号时引用此return (uriConfig: any) => {
。
我尝试将箭头功能更改为常规功能,但错误点(9,12)并没有改变
答案 0 :(得分:2)
useFactory: initializeApp(socketConfig),
这是问题所在。
应用程序初始化程序应该是工厂:这意味着它应该是
useFactory: initializeApp,
否则,您将返回一个函数调用,在打字稿装饰器中(这不仅限于Angular或第8版),禁止使用此函数
答案 1 :(得分:2)
AOT仅支持有限功能调用。
您可以使用已经提供的SOCKET_CONFIG
而不是将工厂包装在另一个函数中
export function initializeApp(uriConfig: ConfigInitService, socketConfig: SocketConfig) {
return uriConfig.load(socketConfig);
}
提供程序应如下所示:
{
provide: APP_INITIALIZER,
useFactory: initializeApp,
deps: [ConfigInitService, SOCKET_CONFIG],
multi: true
},