2016-09-20 88 views
1

NGmodule提供了一種組織模塊中代碼的方法。Angular 2和ngmodule注入器

它也建議提供一些服務作爲模塊的一個屬性,我不明白它的工作方式。

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

那麼,有沒有NG模塊噴油器級別?

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

回答

2

提供模塊中的服務意味着該服務將被實例化並使其成爲模塊一部分的所有組件,指令和管道。 '實例化'這個詞在這裏很重要 - 因爲服務是單例,所以模塊必須跟蹤使用它們的每個組件,指令或管道的服務。你也可以在單獨的組件中提供服務,但是這將在每個組件中實例化服務,這有效地否定了我們首先使用單例服務的原因。在模塊級別提供它解決了我們的這個問題。

如果您想讓您的服務在您的模塊之外使用,那麼不必執行任何操作。在項目中導入的模塊中提供服務意味着它已經在項目的任何地方都可用。

相關:Why is a service provided in a feature module available everywhere?

如果你想使你的模塊組件,指令或管道可用之外,那麼你必須出口他們(和導入模塊中要使用它們) 。您可以通過在模塊中使用export關鍵字來實現這一點。

相關:What classes should I 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的網站上提供有關module system的深入指導。我之前鏈接的FAQ頁面也非常有用。