在Angular2中一個Module指的是使用@NgModule修飾的class。@NgModule利用一個元數據對象來告訴Angular如何去編譯和運行代碼。一個模塊內部能夠包含組件、指令、管道,而且能夠將它們的訪問權限聲明爲公有,以使外部模塊的組件能夠訪問和使用到它們。bootstrap
模塊是用來組織應用的,經過模塊機制外部類庫能夠很方便的擴展應用,Rc5以後,Angular2將許多經常使用功能都分配到一個個的模塊中,如:FormModule、HttpModule、RouterModule。app
NgModule的主要屬性以下:dom
每一個Angular2的應用都至少有一個模塊即跟模塊。ide
import {NgModule} from '@angular/core'; import {BrowserModule} from '@angular/platform-borwser'; import {AppComponent} from './AppComponent'; @NgModule({ declarations: [AppComponent], imports: [BrowserModule], bootstrap: [AppComponent] }) export class AppModule{}
隨着程序的壯大,單一的根模塊已不能清晰的劃分職責,這時候即可以引入Feature Module。Feature Module與根模塊的建立方式同樣,全部的模塊共享一個運行期上下文和依賴注入器。spa
功能模塊與根模塊的職責區別主要有如下兩點:code
Angular2提供的另外一個與模塊有關的技術就是延遲加載了。默認狀況下Angular2將全部的代碼打包成一個文件,目的是爲了提升應用的流暢性,可是若是是運行在mobile中的app,加載一個大文件可能會過慢,因此rc5提供了一種延遲加載方式。component
template: `
<app-title [subtitle]="subtitle"></app-title>
<nav>
<a routerLink="contact" routerLinkActive="active">Contact</a>
<a routerLink="crisis" routerLinkActive="active">Crisis Center</a>
<a routerLink="heroes" routerLinkActive="active">Heroes</a>
</nav>
<router-outlet></router-outlet>
`
import { ModuleWithProviders } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; export const routes: Routes = [ { path: '', redirectTo: 'contact', pathMatch: 'full'}, { path: 'crisis', loadChildren: 'app/crisis/crisis.module#CrisisModule' }, { path: 'heroes', loadChildren: 'app/hero/hero.module#HeroModule' } ]; export const routing: ModuleWithProviders = RouterModule.forRoot(routes);
其中,path指明路徑,loadChildren指明使用延遲加載,'app/crisis/crisis.module#CrisisModule'指明瞭模塊的路徑,和模塊的名稱。orm