Angular 不同种类 Module 的介绍
官方鏈接
Domain NgModules
使用領域模塊來提供專屬于特定功能或應用領域的界面,比如編輯客戶或下單。
領域模塊用來組織與特定功能有關的代碼,里面包含構成此功能的所有組件、路由和模板。領域模塊中的頂級組件是該特性或領域的根,是你要導出的唯一組件。各種私有的支撐子組件都是它的后代。
Domain Module 的一個例子:
Routed NgModules
所有惰性加載模塊都要用帶路由的模塊。使用該模塊的頂級組件作為路由器導航路由的目標。帶路由的模塊不會導出任何內容,因為它們的組件永遠不會出現在外部組件的模板中。
不要把惰性加載的帶路由的模塊導入到另一個模塊中,因為這會觸發一個急性加載,從而破壞了惰性加載它的目的。
例如,如果在 app.module.ts 里導入期望 lazy load 的 module A, 則 A 的lazy loading 行為將失效。
帶路由的模塊很少有提供者,因為你只在需要的時候加載帶路由的模塊(例如通過路由導航過來時)。 provider 數組中列出的服務不可用,因為根注入器不可能預先知道惰性加載的模塊。如果你包含了提供者,那么它們所提供的服務的生命周期應該和該模塊的生命周期完全一樣。不要在帶路由的模塊及其導入的相關模塊中提供全應用范圍內的單例服務。
路由定義模塊
使用路由定義模塊來為領域模塊提供路由配置,從而將路由相關的關注點從其伴生領域模塊中分離出來。例子之一是官網中提到的 ContactRoutingModule,它為其伴生領域模塊 ContactModule 提供路由。
使用路由定義模塊來完成如下任務:
- 定義路由。
- 把路由器配置文件添加到模塊的導入表中。
- 往模塊的提供者列表中添加路由守衛和解析器(resolver)提供者。
路由定義模塊的名字應該和其伴生模塊的名字平行,但使用 Routing 后綴。例如, contact.module.ts 中的 ContactModule 有一個位于 contact-routing.module.ts 中的名為 ContactRoutingModule 的路由定義模塊。
路由定義模塊只能被其伴生模塊導入。如果伴生模塊是根模塊 AppModule ,那么 AppRoutingModule 就會通過其導入表中的 RouterModule.forRoot(routes) 來添加路由器配置。
下圖是 SAP Spartacus 一個例子:
服務模塊
使用服務模塊來提供實用工具服務,比如數據訪問或消息傳遞。理想的服務模塊完全由提供者組成,沒有可聲明對象。
注意,屬于該模塊的一組組件、指令和管道統稱可聲明對象。
可聲明對象必須屬于也只能屬于一個模塊。 如果你嘗試把同一個類聲明在多個模塊中,那么編譯器就會報錯。 要注意不能聲明那些從其它模塊中導入的類。
Angular 的 HttpClientModule 是服務模塊的一個典范。
只能使用根模塊 AppModule 來導入各種服務模塊。
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的Angular 不同种类 Module 的介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络之(电路交换、报文交换、分组交
- 下一篇: cad怎么查看块的数量(CAD怎么创建块