Angular2 NgModule

1. 說明

典型的模塊是一個內聚的代碼塊,用來實現某種單一的功能。Angular2應用程序本質上是有一系列模塊組成的,並且Angular 自己就是一組模塊庫。模塊主要是導出一些東西——類,函數,值,供其它模塊導入,而後使用這個類,函數或者值。Angular2 應用是模塊化的,而且 Angular2 有本身的模塊系統,它被稱爲 Angular2 模塊 或 NgModules。bootstrap

NgModules是帶有 @NgModule 裝飾器函數的 類 。 @NgModule 接收一個元數據對象,該對象告訴 Angular 如何編譯和運行模塊代碼。它標記出該模塊擁有的組件,指令和管道,引入的其餘Angular2模塊,以及導出給其餘模塊使用的公共部分,同時還能夠向當前模塊注入對應的服務提供商等。異步

模塊是組織應用程序和使用外部程序庫的最佳途徑。不少 Angular 庫都是模塊,好比: FormsModuleHttpModuleRouterModule 。模塊可能在應用啓動時主動加載,也可能由路由器進行異步 惰性加載。ide

每一個Angular2應用都必須存在惟一一個根模塊,咱們將經過引導根模塊來啓動應用。模塊化

2. 實例

Angular2模塊通常由註解,元數據以及模塊類組成,來看下面的這個簡單的組件的例子:函數

import { NgModule } from '@angular/core';spa

import { FormsModule, ReactiveFormsModule } from '@angular/forms';code

import { PortalComponent } from './portal';orm

import { routing } from './routes';對象

@NgModule({ci

imports: [

routing,

FormsModule,

ReactiveFormsModule

],

exports: [],

declarations: [PortalComponent],

providers: []

})

export class PortalModule {

}

以上的例子能夠看出,咱們經過元數據imports導入了FormsModule等其餘Angular2模塊,經過declarations聲明當前模塊中使用的組件等,固然,咱們還能夠經過exports導出公共部分提供其餘模塊使用,以及providers提供了當前模塊所使用的服務提供商。

3. 定義

經過官方提供的NgModule的API咱們能夠知道,其元數據的描述以下。

interface NgModule {

providers : Provider[]

declarations : Array<Type<any>|any[]>

imports : Array<Type<any>|ModuleWithProviders|any[]>

exports : Array<Type<any>|any[]>

entryComponents : Array<Type<any>|any[]>

bootstrap : Array<Type<any>|any[]>

schemas : Array<SchemaMetadata|any[]>

id : string

}

咱們分別對這些屬性加以說明:

l providers : Provider[]

注入在該模塊中使用的服務提供商,在根模塊注入的服務供應商能夠供整個應用程序使用。

l declarations : Array<Type<any>|any[]>

聲明在該模塊中使用的組件,指令以及通道

l imports : Array<Type<any>|ModuleWithProviders|any[]>

導入在該模塊中使用的其餘Angular2模塊中的組件,指令以及管道等,該模塊中的組件等由exports屬性導出。

l exports : Array<Type<any>|any[]>

導出該模塊中的組件,指令以及管道等,以便提供給其餘Angular2模塊使用。

l entryComponents : Array<Type<any>|any[]>

聲明在模塊定義時進行編譯的組件,當模塊加載的時候回生成ComponentFactory並保存在ComponentFactoryResolver,使用ComponentFactoryResolver建立組件的時候應該如今此處進行聲明。

l bootstrap : Array<Type<any>|any[]>

此處聲明當模塊啓動加載的時候同時執行啓動加載的組件,這些組件會自動添加到entryComponents中。

l schemas : Array<SchemaMetadata|any[]>

聲明在Angular中使用的非組件,指令或管道等Angular標準元素或者屬性的其餘自定義元素或屬性信息。經常使用的schemas形式有:

NO_ERRORS_SCHEMA: 全部的元素或者屬性都可以

CUSTOM_ELEMENTS_SCHEMA:任意元素(元素標籤中包含「-」)和屬性均可以

l id : string

一個獨立的模塊ID,用來在getModuleFactory標識對應的模塊,若是設定對應的ID信息,這不會在getModuleFactory中注入。

相關文章
相關標籤/搜索