好吧,我正在根据以下基础结构构建我的项目:
但是有些事情我还不够清楚。
据我所知,
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
不应该是相同的方式吗?因为该应用程序运行良好;但是,我处于开发模式。希望我足够清楚,有人可以帮助我消除这个疑问。
最佳答案
不,NgModule的exports
数组不应包含没有组件,指令或管道的模块(例如HttpClientModule
)。
从NgModule导出内容的目的是使其他模块(或这些其他模块中的内容)具有对该模块的组件,指令和管道的的访问权限,并且有时还使这些其他模块具有访问权(即,重新导出)组件,指令和其他模块中的管道,为方便起见。
您的CoreModule
将RouterModule
列为导出文件,以便任何导入CoreModule
的人都可以使用routerLink
属性指令(除其他外)。也就是说,RouterModule
导出组件,指令和/或管道。
由于HttpClientModule
没有声明任何组件,指令或管道,因此将其列为NgModule导出没有任何值(value)。
这些Angular guide NgModule FAQs也可能有用:
关于 Angular -HttpClientModule是否应位于CoreModule的Exports数组中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50261657/