返回包含ngModule元数据的类

时间:2017-05-10 08:28:49

标签: angular webpack

我正在尝试编写一个可重用的类来设置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'.

1 个答案:

答案 0 :(得分:2)

据我所知它应该有效,请注意你不会有AOT功能,这会给你的应用程序带来很大的推动力。所以,你应该有一个很好的理由做这样的事情。

无论如何,我的猜测是你需要切换你的参数:)并创建一个静态方法,因为你的类首先需要一个组件,然后是一个模块,而不是相反的方式

IncludeServerApp.createServerApp(AppComponent, AppModule)

移动你的回报:

export class IncludeServerApp {

  static createServerApp(appComponent, appModule) {
     @NgModule({...})
     class ServerAppModule {}

     return ServerAppModule ;
  }
}