Angular9 特性模塊分類

2020-07-02 17:03 更新

下面是特性模塊的五個常用分類,包括五組:

  • 領(lǐng)域特性模塊。

  • 帶路由的特性模塊。

  • 路由模塊。

  • 服務(wù)特性模塊

  • 可視部件特性模塊。

雖然下面的指南中描述了每種類型的使用及其典型特征,但在實(shí)際的應(yīng)用中,你還可能看到它們的混合體。

  1. 特性模塊:領(lǐng)域。

指導(dǎo)原則:

  • 領(lǐng)域特性模塊用來給用戶提供應(yīng)用程序領(lǐng)域中特有的用戶體驗(yàn),比如編輯客戶信息或下訂單等。

  • 它們通常會有一個頂層組件來充當(dāng)該特性的根組件,并且通常是私有的。用來支持它的各級子組件。

  • 領(lǐng)域特性模塊大部分由 declarations 組成,只有頂層組件會被導(dǎo)出。

  • 領(lǐng)域特性模塊很少會有服務(wù)提供者。如果有,那么這些服務(wù)的生命周期必須和該模塊的生命周期完全相同。

  • 領(lǐng)域特性模塊通常會由更高一級的特性模塊導(dǎo)入且只導(dǎo)入一次。

  • 對于缺少路由的小型應(yīng)用,它們可能只會被根模塊 AppModule 導(dǎo)入一次。

  1. 特性模塊:路由( Routed )。

指導(dǎo)原則:

  • 帶路由的特性模塊是一種特殊的領(lǐng)域特性模塊,但它的頂層組件會作為路由導(dǎo)航時的目標(biāo)組件。

  • 根據(jù)這個定義,所有惰性加載的模塊都是路由特性模塊。

  • 帶路由的特性模塊不會導(dǎo)出任何東西,因?yàn)樗鼈兊慕M件永遠(yuǎn)不會出現(xiàn)在外部組件的模板中。

  • 惰性加載的路由特性模塊不應(yīng)該被任何模塊導(dǎo)入。如果那樣做就會導(dǎo)致它被急性加載,破壞了惰性加載的設(shè)計用途。 也就是說你應(yīng)該永遠(yuǎn)不會看到它們在 AppModuleimports 中被引用。 急性加載的路由特性模塊必須被其它模塊導(dǎo)入,以便編譯器能了解它所包含的組件。

  • 路由特性模塊很少會有服務(wù)提供者。如果那樣做,那么它所提供的服務(wù)的生命周期必須與該模塊的生命周期完全相同。不要在路由特性模塊或被路由特性模塊所導(dǎo)入的模塊中提供全應(yīng)用級的單例服務(wù)。

  1. 特性模塊:路由( Routing )。

指導(dǎo)原則:

路由模塊為其它模塊提供路由配置,并且把路由這個關(guān)注點(diǎn)從它的配套模塊中分離出來。

路由模塊通常會做這些:

  • 定義路由。

  • 把路由配置添加到該模塊的 imports 中。

  • 把路由守衛(wèi)和解析器的服務(wù)提供者添加到該模塊的 providers 中。

  • 路由模塊應(yīng)該與其配套模塊同名,但是加上“Routing”后綴。比如,"foo.module.ts" 中的 FooModule 就有一個位于 "foo-routing.module.ts" 文件中的 FooRoutingModule 路由模塊。 如果其配套模塊是根模塊 AppModuleAppRoutingModule 就要使用 RouterModule.forRoot(routes) 來把路由器配置添加到它的 imports 中。 所有其它路由模塊都是子模塊,要使用 RouterModule.forChild(routes)。

  • 按照慣例,路由模塊會重新導(dǎo)出這個 RouterModule,以便其配套模塊中的組件可以訪問路由器指令,比如 RouterLinkRouterOutlet。

  • 路由模塊沒有自己的可聲明對象。組件、指令和管道都是特性模塊的職責(zé),而不是路由模塊的。

路由模塊只應(yīng)該被它的配套模塊導(dǎo)入。

  1. 特性模塊:服務(wù)。

指導(dǎo)原則:

服務(wù)模塊提供了一些工具服務(wù),比如數(shù)據(jù)訪問和消息。理論上,它們應(yīng)該是完全由服務(wù)提供者組成的,不應(yīng)該有可聲明對象。Angular 的 HttpClientModule 就是一個服務(wù)模塊的好例子。

根模塊 AppModule 是唯一的可以導(dǎo)入服務(wù)模塊的模塊。

  1. 特性模塊:窗口部件。

指導(dǎo)原則:

  • 窗口部件模塊為外部模塊提供組件、指令和管道。很多第三方 UI 組件庫都是窗口部件模塊。

  • 窗口部件模塊應(yīng)該完全由可聲明對象組成,它們中的大部分都應(yīng)該被導(dǎo)出。

  • 窗口部件模塊很少會有服務(wù)提供者。

  • 如果任何模塊的組件模板中需要用到這些窗口部件,就請導(dǎo)入相應(yīng)的窗口部件模塊。

下表中匯總了各種特性模塊類型的關(guān)鍵特征。

特性模塊 特性模塊 提供者 導(dǎo)出什么 被誰導(dǎo)入
領(lǐng)域 罕見 頂層組件 特性模塊,AppModule
路由( Routed ) 罕見
路由( Routing ) 有(守衛(wèi)) RouterModule 特性(供路由使用)
服務(wù) AppModule
窗口部件 罕見 特性
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號