簡體   English   中英

Angular 2和ngmodule注射器

[英]Angular 2 and ngmodule injector

NGmodule提供了一種在模塊中組織代碼的方法。

它還建議提供一些服務作為模塊的屬性,我不理解其工作方式。

首先它的意思是,如果我添加的一個服務提供的NGmodule的屬性,它會暴露的服務(這意味着我必須調用模塊另外一個內部使用的服務)?

因此,是否存在NGmodule噴射器液位?

如何在另一個模塊的模塊盒外使用服務?

在模塊中提供服務意味着該服務將被實例化並提供給該模塊中的所有組件,指令和管道。 此處的“實例化”是關鍵-由於服務是單例,因此模塊必須跟蹤使用它們的每個組件,指令或管道的服務。 您也可以在單個組件中提供服務,但是這將實例化每個組件中的每個服務,從而有效地消除了我們首先使用單例服務的原因。 在模塊級別提供它可以為我們解決這個問題。

如果您想使服務在模塊之外可用,則無需執行任何操作。 在項目中導入的模塊中提供服務意味着該服務已在項目中的任何位置可用。

相關: 為什么功能模塊中提供的服務隨處可見?

如果要使組件,指令或管道在模塊外部可用,則必須導出它們(並將它們導入要使用它們的模塊中)。 您可以通過在模塊中使用export關鍵字來實現。

相關: 我應該導出哪些類?

例如,您可以使用NgIf指令,因為它是從CommonModule( docs )導出的,然后我們將其導入我們自己的模塊中:

@NgModule({
  declarations: [COMMON_DIRECTIVES, COMMON_PIPES],
  exports: [COMMON_DIRECTIVES, COMMON_PIPES],
  providers: [
    {provide: NgLocalization, useClass: NgLocaleLocalization},
  ],
})

有趣的事實:如果只有一個模塊(引導的根模塊),則實際上只使用BrowserModule而不是CommonModule。 CommonModule的所有功能都在BrowserModule中的原因是因為BrowserModule只是導入並重新導出整個CommonModule。

如果您需要更多信息,可以在angular2的網站上找到有關模塊系統的深入指南。 我之前鏈接的FAQ頁面也很有用。

暫無
暫無

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

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