簡體   English   中英

如何判斷Angular2模塊是否可以導入共享模塊

[英]How to tell if an Angular2 module is ok to import into shared module

是否存在用於確定模塊是提供者還是導出其他提供者模塊的試金石; 用於確定模塊是否是在“共享”模塊中列出的候選模塊?

來自angular.io:

“由於之前解釋的原因,SharedModule不應該有供應商。它的任何導入或重新導出的模塊也不應該有提供者。如果你偏離了這個指導方針,就要知道你在做什么以及為什么。”

https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-module-recommendations

但是,如果我去使用模塊,讓我們說ReactiveFormsModule或RoutingModule,我如何確定它是否通過了上述測試? 如果我只使用SharedModule中沒有提供者或導入模塊重新導出提供者的模塊,那么肯定必須有一些方法來判斷模塊是否滿足此要求。 它是什么?

服務通常是具有應用范圍的單身人士。

導入模塊時,導入模塊提供的服務將添加到主機模塊的注入器中。 通過在共享模塊中提供服務,存在多個模塊導入共享模塊和創建服務的多個副本的真實危險,每個模塊具有模塊范圍。 如果您向SharedModule添加服務,請確保這是您的意圖。

根據最佳實踐,每個應用程序應該有一組Core模塊。 這些Core模塊不是共享的(它應該只能由AppModule導入),因此在不破壞Singleton意圖的情況下將服務添加到Core模塊是安全的。

石蕊試驗:

如果您需要在應用程序范圍內共享的Singleton Services,則不要將它們放在SharedModule中,因為可以從同一應用程序中的多個模塊導入SharedModule 而是將它們放在CoreModules中 ,它只能由AppModule導入。

請記住以下約定和准則:

  1. 每個應用程序只有一個AppModule
  2. AppModules可以導入其他模塊
  3. 核心模塊只能由AppModule導入
  4. 共享模塊可以由任何模塊導入(不僅僅是AppModule)

常見的做事方式如下圖所示。

在此輸入圖像描述

通常,如果providers[]的范圍僅限於該特定模塊,則它們始終列在相應模塊的providers[]中,否則將其移至Root模塊AppModule。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM