2016-12-14 71 views
4

我是A2的新手,所以這個問題可能以前曾被問過,但是我使用了錯誤的術語,所以找不到答案。Angular2 - NgModule外部的組件注入

但是,我想了解A2內的@Component注射。盡我所知,所有的組件不管如何嵌套的,他們總是有作爲NgModules文件的一部分在根級別聲明(在這裏聲明即服務都可以訪問通過所有部件)

@NgModule({ 
    imports: [ 
     ... 
    ], 
    declarations: [ 
     1stComponent, 
     2ndComponent, 
     3rdComponent, 
     4thComponent  <-- All components must be included here 
    ], 
    providers: [ 
     ... 
    ], 
    bootstrap: [ 
     AppComponent 
    ] 
}) 

對我來說,這似乎有點奇怪。如果您有一個ChildComponent,只會顯示爲ParentComponent的一部分,該怎麼辦?爲什麼ChildComponent需要在NgModule級別聲明?在需要時,這個ChildComponent不能被聲明爲父組件的一部分嗎?在加載應用程序時,預先聲明所有組件是否會導致開銷 - 它需要將所有內容都提前?還是僅僅是NgModule定義了構建組件的內容,而不是在運行時顯示它們的時間或方式?

回答

1

在早期版本的Angular中,它的功能與您期待的一樣(即每個組件定義了它自己的依賴關係)。 在RC發佈的時候,A2團隊決定改變它。

由於Estus提到你可以使用延遲加載。有一個很好的參考指南here,顯示如何做到這一點。 (向下滾動至'延遲加載主頁模塊'部分)。

基本上,Angular團隊決定允許您將您的應用程序分割爲不同的模塊,從而所有組件&指令 依賴關係在模塊級別定義。如果您真的擔心初始負載過大,請將事件分解爲不同的模塊。

同樣在回答你的問題,是通過在app.module.ts的聲明數組中定義你的組件,然後你將隨後加載它們。 (因爲你必須首先將它們導入到文件中以引用它們)。