我正在尝试编写一个可重用的类来设置ngModule。
该课程如下:
export class IncludeServerApp {
constructor(AppComponent: any, AppModule: any) {
return @NgModule({
bootstrap: [AppComponent],
providers: [
{
provide: APP_BOOTSTRAP_LISTENER,
useFactory: onBootstrap,
multi: true,
deps: [
ApplicationRef,
TransferState
}
],
imports: [
BrowserModule.withServerTransition({
appId: 'my-app-id'
}),
ServerModule,
ServerTransferStateModule,
AppModule
]
})
class ServerAppModule { }
}
}
}
然后我像这样使用这个类:
new IncludeServerApp(AppComponent, AppModule)
但是我收到了这个错误:
Error: No NgModule metadata found for '[object Object]'.
at NgModuleResolver.resolve (/Users/michael/Code/ng-universal-demo/dist/server.js:73337:23)
at CompileMetadataResolver.getNgModuleMetadata (/Users/michael/Code/ng-universal-demo/dist/server.js:73921:60)
at JitCompiler._loadModules (/Users/michael/Code/ng-universal-demo/dist/server.js:85088:66)
at JitCompiler._compileModuleAndComponents (/Users/michael/Code/ng-universal-demo/dist/server.js:85047:52)
at JitCompiler.compileModuleAsync (/Users/michael/Code/ng-universal-demo/dist/server.js:85009:23)
at Promise (/Users/michael/Code/ng-universal-demo/dist/server.js:112849:22)
at new ZoneAwarePromise (/Users/michael/Code/ng-universal-demo/dist/server.js:151252:29)
at getFactory (/Users/michael/Code/ng-universal-demo/dist/server.js:112835:12)
at View.engine (/Users/michael/Code/ng-universal-demo/dist/server.js:112813:13)
at View.render (/Users/michael/Code/ng-universal-demo/dist/server.js:116553:8)
从我所看到的,Webpack在编译之后由于某种原因删除了@ngModule
代码。这实际上可以吗?我知道@ngModule用于为{I}尝试返回的ServerAppModule
类提供元数据。
我注意到如果我在@ngModule之前有回复错误是:
Error: No NgModule metadata found for '[object Object]'
如果它在错误class ServerAppModule {}
之前:
Error: No NgModule metadata found for 'ServerAppModule'.
答案 0 :(得分:2)
据我所知它应该有效,请注意你不会有AOT功能,这会给你的应用程序带来很大的推动力。所以,你应该有一个很好的理由做这样的事情。
无论如何,我的猜测是你需要切换你的参数:)并创建一个静态方法,因为你的类首先需要一个组件,然后是一个模块,而不是相反的方式
IncludeServerApp.createServerApp(AppComponent, AppModule)
移动你的回报:
export class IncludeServerApp {
static createServerApp(appComponent, appModule) {
@NgModule({...})
class ServerAppModule {}
return ServerAppModule ;
}
}