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