好吧,我正按照以下基础设施构建我的项目:
但有些事我还不够清楚。
据我所知,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
,因此HttpClientModule
和BrowserAnimationsModule
也不应该导出?就像RouterModule
一样。
我看到CoreModule
和SharedModule
就像某种桥梁。
SharedModule
对我来说更有意义:
@NgModule({
imports: [
MatButtonModule
],
exports: [
MatButtonModule
]
})
export class SharedModule {
}
SharedModule
导入MatButtonModule
然后将其导出,以便其他模块可以使用它。
CoreModule
不应该是一样的吗?因为App运行良好;但是,我处于开发模式。
希望我足够清楚,有人可以帮我解决这个疑问。
答案 0 :(得分:3)
否,NgModule的exports
数组不应包含没有组件,指令或管道的模块(例如HttpClientModule
)。
从NgModule导出内容的目的是使其他模块(或这些其他模块中的内容)访问该模块的组件,指令和管道,有时还会赋予这些其他模块为方便起见,可以从其他模块访问(即重新导出)组件,指令和管道。
您的CoreModule
将RouterModule
列为导出文件,以便任何导入CoreModule
的人都可以使用routerLink
属性指令(除其他外)。也就是说,RouterModule
导出组件,指令和/或管道。
由于HttpClientModule
没有声明任何组件,指令或管道,因此将其列为NgModule导出没有任何价值。
这些Angular guide NgModule FAQs也可能有用:
答案 1 :(得分:-1)
我个人认为BrowserAnimationsModule可以而且应该在AppModule本身中导入。
如果您使用HttpClient的所有服务都在CoreModule本身中,则无需导出HttpClientModule。
即使您在其他模块中使用HttpClient,您也可以在该特定模块中导入HttpClientModule,或者在AppModule中执行(除了延迟加载的模块)。