Angular - HttpClientModule 应该在 CoreModule 的 Exports 数组中吗?

Rot*_*ese 5 typescript ng-modules angular

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

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

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

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

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

我有这个CoreModule

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

现在,既然 myCoreModule是在my中导入的AppModule,那么HttpClientModule和不应该也BrowserAnimationsModule被导出吗?就像RouterModule.

我看到了CoreModule并且SharedModule喜欢某种桥梁。

SharedModule让我更有意义:

@NgModule({
    imports: [
        MatButtonModule
    ],
    exports: [
        MatButtonModule
    ]
})
export class SharedModule {
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ale*_*ers 5

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

从 NgModule 导出某些东西的目的是让其他模块(或其他模块中的东西)可以访问该模块的组件、指令和管道——有时还可以让其他模块访问(即重新导出)组件,为了方便起见,来自其他模块的指令和管道。

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

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

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


Jos*_*han 0

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

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

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