典型的模块是一个内聚的代码块,用来实现某种单一的功能。Angular2应用程序本质上是有一系列模块组成的,并且Angular 自己就是一组模块库。模块主要是导出一些东西——类,函数,值,供其它模块导入,而后使用这个类,函数或者值。Angular2 应用是模块化的,而且 Angular2 有本身的模块系统,它被称为 Angular2 模块 或 NgModules。bootstrap
NgModules是带有 @NgModule 装饰器函数的 类 。 @NgModule
接收一个元数据对象,该对象告诉 Angular 如何编译和运行模块代码。它标记出该模块拥有的组件,指令和管道,引入的其余Angular2模块,以及导出给其余模块使用的公共部分,同时还能够向当前模块注入对应的服务提供商等。异步
模块是组织应用程序和使用外部程序库的最佳途径。不少 Angular 库都是模块,好比: FormsModule
、 HttpModule
、 RouterModule
。模块可能在应用启动时主动加载,也可能由路由器进行异步 惰性加载。ide
每一个Angular2应用都必须存在惟一一个根模块,咱们将经过引导根模块来启动应用。模块化
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提供了当前模块所使用的服务提供商。
经过官方提供的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中注入。