Angular 是一個用html 和typescript 構建
客戶端應用的平臺與框架
。
它將核心功能和可選功能作爲一組TypeScript 庫進行實現,你可以把它們導入到你的應用中。
1. 模塊Module
- Angular 應用的基本構造塊是
NgModule
, 它爲組件提供了編譯的上下文環境。- Angular 應用就是由一組NgModule定義的。 NgModule 可以將其組件和一組相關代碼(如服務)關聯起來,形成功能單元。
- 一個Angular應用至少有一個用於啓動的
根模塊(root module)
, 根模塊通常命名爲AppModule
,並位於一個名叫 app.module.ts 的文件中。還會有很多特性模塊(feature module)
- NgModule 是由@NgModule() 裝飾器定義的類。
- NgModules 用於配置注入器和編譯器(the injector and the compiler),並幫你把那些相關的東西組織在一起。
@NgModule()
裝飾器是一個函數,參數是一個元數據對象,元數據對象的屬性用於描述這個模塊。其中最重要的屬性如下:
declarations
(可聲明對象表) ——屬於本 NgModule 的組件、指令、管道。exports
(導出表) —— 用於其它模塊的組件模板中使用的聲明對象的子集(the subset of declarations)。imports
(導入表) —— 其他模塊,本NgModule聲明的組件需要使用它們的導出類。providers
—— 本模塊向全局服務中貢獻的那些服務的創建器。 這些服務能被本應用中的任何部分使用。(你也可以在組件級別指定服務提供商,這通常是首選方式。)bootstrap
—— 應用的主視圖,稱爲根組件。它是應用中所有其它視圖的宿主。只有根模塊才應該設置這個bootstrap
屬性。
@NgModule
的參數是一個元數據對象,用於描述如何編譯組件的模板,以及如何在運行時創建注入器。 它會標出該模塊自己的組件、指令和管道(declarations),通過exports
屬性公開其中的一部分,以便外部組件使用它們。NgModule
還能把一些服務提供商添加到應用的依賴注入器中(provider)。
2.常用模塊NgModules
NgModule | Import it from | Why you use it |
---|---|---|
BrowserModule | @angular/platform-browser | 當你想要在瀏覽器中運行app 時 |
CommonModule | @angular/common | 當你想要使用NgIf 和NgFor時 |
FormsModule | @angular/forms | 當要構建模板驅動表單時 |
ReactiveFormsModule | @angular/forms | 當要構建響應式表單時 |
RouterModule | @angular/router | 當要使用路由功能,並且你要用到RouterLink, forRoot() 和.forChild()時 |
HttpClientModule | @angular/common/http | 當要和服務器對話時 |
BrowserModule
導入了CommonModule
,它貢獻了很多通用的指令,比如ngIf
和ngFor
。 另外,BrowserModule
重新導出了CommonModule
,以便它所有的指令在任何導入了BrowserModule
的模塊中都可以使用。
對於運行在瀏覽器中的應用來說,都必須在根模塊AppModule
中導入BrowserModule
,因爲它提供了啓動和運行瀏覽器應用時某些必須的服務。BrowserModule
的提供商是面向整個應用的,所以它只能在根模塊中使用,而不是特性模塊。 特性模塊只需要CommonModule
中的常用指令,它們不需要重新安裝所有全應用級的服務。