我有3个共享一个共同框架的应用程序,因此目前有一堆重复的代码(基本的ui布局,常用代码,如loggers等,security / keycloak auth wrapper)。我已经提取了所有重复的模块代码,但也希望简化应用程序模块声明本身。我创建了一个“Application”类,其中包含一个静态方法,该方法需要几个参数并根据公共模块构建一个NgModule定义,连接传入的模块...
public static Define({modules, states, defaultState}) {
return {
imports: [
BrowserModule,
FormsModule,
HttpModule,
TreeModule,
NgbModule.forRoot(),
ToastModule.forRoot(<ToastOptions>{animate: 'flyRight', positionClass: 'toast-bottom-right'}),
UIRouterModule.forRoot(<RootModule>{ states: states.concat({name: 'app', url: '/app', component: ShellComponent}), useHash: true, otherwise: defaultState }),
CommonModule,
DialogsModule,
LayoutModule,
].concat(modules),
providers: [
{
provide: Http,
useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new AuthHttpService(backend, defaultOptions),
deps: [XHRBackend, RequestOptions]
}
],
bootstrap: [ UIView ]
};
}
然后每个应用程序可以简单地调用它,只列出其特定的模块,状态和这样的初始/默认状态......
@NgModule(
Application.Define({
modules: [
PatientIdentityModule,
RecordViewerModule,
ResourcesModule,
],
states: [
{name: 'app.resourceList', url: '/resourceList', component: ResourcesComponent },
{name: 'app.resourceEdit', url: '/resourceEdit/:itemAction/:itemUuid', component: ResourcesComponent },
{name: 'app.patientIdentity', url: '/patientIdentity', component : PatientIdentityComponent},
{name : 'app.recordViewer', url: '/recordViewer', component : RecordViewerComponent }
],
defaultState : { state: 'app.recordViewer', params: {} }
})
)
export class AppModule {}
当所有代码在一起但是当我尝试提取Application类并构建节点模块库时,这很有用,然后我得到
Error: No NgModule metadata found for 'AppModule'
任何想法或我是否完全以错误的方式解决这个问题!?
Angular 2.1.0, typescript 2.0.6, webpack 1.13.2