6

好吧,我正在按照以下基础架构构建我的项目:

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

但是有一点我还不够清楚。

据我所知,HttpClientModule应该是CoreModule因为...它提供了HttpClient向服务器发出 HTTP 请求的服务。

现在,imports数组允许 Angular 模块使用其他模块提供的功能,并且exports数组允许 Angular 模块公开它的一些功能。

我有这个CoreModule

@NgModule({
    imports: [
        BrowserAnimationsModule,
        HttpClientModule,
        RouterModule.forRoot(routes, {
            enableTracing: true
        })
    ],
    exports: [
        RouterModule
    ]
})
export class CoreModule {
}

现在,既然 myCoreModule是在 my 中导入的,那么andAppModule不应该也被导出吗?就像.HttpClientModuleBrowserAnimationsModuleRouterModule

我看到CoreModuleandSharedModule喜欢某种桥梁。

SharedModule我来说更有意义:

@NgModule({
    imports: [
        MatButtonModule
    ],
    exports: [
        MatButtonModule
    ]
})
export class SharedModule {
}

SharedModule导入然后MatButtonModule导出它,以便其他模块可以使用它。

不应该CoreModule是一样的吗?因为App运行良好;但是,我处于开发模式。

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

4

2 回答 2

5

不,exportsNgModule 的数组不应该包含没有组件、指令或管道(如HttpClientModule)的模块。

从 NgModule 导出某些东西的目的是让其他模块(或其他模块中的东西)访问这个模块的组件、指令和管道——有时也让那些其他模块访问(即重新导出)组件,指令和来自其他模块的管道以方便使用。

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

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

这些Angular 指南 NgModule 常见问题解答也可能有用:

于 2018-09-23T13:30:09.360 回答
0

我个人认为 BrowserAnimationsModule 可以而且应该被导入 AppModule 本身。

如果所有使用 HttpClient 的服务都在 CoreModule 中,则不需要导出 HttpClientModule。

即使您确实在其他模块中使用 HttpClient,您也可以在该特定模块中导入 HttpClientModule,或者在 AppModule 中执行(延迟加载模块除外)。

于 2018-05-09T20:43:02.497 回答