何时/如何评估@NgModule?

时间:2016-12-15 16:49:17

标签: javascript angular typescript npm node-modules

我有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

0 个答案:

没有答案