2016-08-17 33 views
3

我正在嘗試玩Angular2,當我將基本代碼升級到Angular 2.0.0-RC5時,我發現引入了一個重大更改,@NgModule,這相當於角度。 moulle() in Angularjs 1.x?對Angular 2中提供的@NgModule感到困惑

對於我來說,@ngModule使事情變得複雜。

當我使用Angular 1.x時,在社區中有一些關於angular.module的抱怨,因爲存在一些javascript模塊系統。

默認情況下,角-CLI產生的代碼是基於SystemJS,我們可以使用Typescirpt組織的源代碼的結構。

我們爲什麼需要@NgModule,它是在應用程序運行時組織的一個邏輯視圖?

我假定一個@NgModule被指定用於基於模塊架構爲Angular2和@ngModule可以在不同的應用中重複使用。與過去幾年中使用的其他基於模塊/包/插件的框架相比。它缺乏一些功能。

  1. @NgModule提供導入/導出功能,但如何導入模塊,而不打字稿進口條款,並拒絕其他@NgModule導入@NgModule私有組件/管材/服務。
  2. 沒有@NgModule的路由前綴,想象一下,由3party團隊維護@NgModule。例如。一個共同的評論模塊的任何基於帖子的應用程序,如何避免路由衝突,如何覆蓋路由定義,如何在主機@NgModule中配置@ngModule?
  3. 爲什麼路由配置由RouteModule.forRoot()(或forChild)註冊而不是路由 @NgModule註釋的屬性是這樣的。

    @NgModule(route:{prefix:'/comment', config: commentRouteConfigs}) export class CommentModule{}

    目前,@NgModule API耦合路徑CONFIGS。

  4. 如何覆蓋在@NgModule定義,當我一個主機模塊中導入了一個模塊組件的模板。

  5. 如何掛鉤@ngModule生命週期(mout/unmout或加載/卸載等,我無法在Angular文檔中找到desc),以及如何在組件/管道/服務之間共享數據狀態, ngModule內部?
  6. 如果可能將@NgModule設計爲可選功能,或者如果我們不明確聲明@ngModule,則默認情況下爲應用程序使用隱式@ngModule。

謝謝。

+0

好問題,特別是如何使用第三方模塊而不會互相干擾的部分。我還添加了一個類似的問題 - http://stackoverflow.com/q/39010439/1303917 - 在我看來,'@ NgModule'比解耦更耦合。如何在不收集'@ NgModule'的所有依賴關係的情況下單獨使用它們。 – Yves

+0

只要檢查這篇文章 - https://angular.io/docs/ts/latest/guide/ngmodule.html - 如果你不知道它已經。感謝回答我的問題的@mxii。 – Yves

+0

@Yves儘管如此,我現在很享受Angular,我的所有路由規則都在一個獨立的sidecar'NgModule'中註冊到特徵模塊中。 – Hantsy

回答

2

據我所知NgModule主要介紹了正確支持路由器的路由和組件的延遲加載。

  1. NgModule s進出口與TS進出口無關。它主要是關於依賴注入和編譯模板。

  2. 不知道

  3. 不明白的問題

  4. 重寫模板不被Angular2在所有支持。有構建工具允許這樣做,但Angular2本身不提供任何操作。

  5. 我見過的討論中提到看出模塊生命週期回調,但找不到任何具體的還沒有(像https://github.com/angular/angular/issues/10808#issuecomment-239823985

  6. 我想這是可能的,但我不知道如果Angular2團隊沒有考慮這一點。

+0

我注意到了RC5中令人激動的延遲加載功能,只是對@NgModule設計感到困惑,謝謝你的回覆。 – Hantsy