好吧,我正在根据以下基础结构构建我的项目:

  • 功能模块。
  • 核心模块。
  • 共享模块。

  • 但是有些事情我还不够清楚。

    据我所知,HttpClientModule应该在CoreModule中,因为……好吧,它提供了HttpClient服务来向服务器发出HTTP请求。

    现在,imports数组允许Angular模块使用其他模块中提供的功能,而exports数组允许Angular模块公开其某些功能。

    我的CoreModule中有这个:
    @NgModule({
        imports: [
            BrowserAnimationsModule,
            HttpClientModule,
            RouterModule.forRoot(routes, {
                enableTracing: true
            })
        ],
        exports: [
            RouterModule
        ]
    })
    export class CoreModule {
    }
    

    现在,由于我的CoreModule是导入到我的AppModule中的,因此不应该同时导出HttpClientModuleBrowserAnimationsModule吗?就像RouterModule一样。

    我看到的CoreModuleSharedModule就像某种桥梁。
    SharedModule对我来说更有意义:
    @NgModule({
        imports: [
            MatButtonModule
        ],
        exports: [
            MatButtonModule
        ]
    })
    export class SharedModule {
    }
    
    SharedModule导入MatButtonModule,然后将其导出,以便其他模块可以使用它。
    CoreModule不应该是相同的方式吗?因为该应用程序运行良好;但是,我处于开发模式。

    希望我足够清楚,有人可以帮助我消除这个疑问。

    最佳答案

    不,NgModule的exports数组不应包含没有组件,指令或管道的模块(例如HttpClientModule)。

    从NgModule导出内容的目的是使其他模块(或这些其他模块中的内容)具有对该模块的组件,指令和管道的的访问权限,并且有时还使这些其他模块具有访问权(即,重新导出)组件,指令和其他模块中的管道,为方便起见。

    您的CoreModuleRouterModule列为导出文件,以便任何导入CoreModule的人都可以使用routerLink属性指令(除其他外)。也就是说,RouterModule导出组件,指令和/或管道。

    由于HttpClientModule没有声明任何组件,指令或管道,因此将其列为NgModule导出没有任何值(value)。

    这些Angular guide NgModule FAQs也可能有用:

  • What should I export?
  • What should I not export?
  • 关于 Angular -HttpClientModule是否应位于CoreModule的Exports数组中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50261657/

    10-09 03:32