Angular2学习笔记——详解NgModule模块


Posted in Javascript onDecember 02, 2016

在Angular2中一个Module指的是使用@NgModule修饰的class。@NgModule利用一个元数据对象来告诉Angular如何去编译和运行代码。一个模块内部可以包含组件、指令、管道,并且可以将它们的访问权限声明为公有,以使外部模块的组件可以访问和使用到它们。

模块是用来组织应用的,通过模块机制外部类库可以很方便的扩展应用,Rc5之后,Angular2将许多常用功能都分配到一个个的模块中,如:FormModule、HttpModule、RouterModule。

NgModule的主要属性如下:

  • declarations:模块内部Components/Directives/Pipes的列表,声明一下这个模块内部成员
  • providers:指定应用程序的根级别需要使用的service。(Angular2中没有模块级别的service,所有在NgModule中声明的Provider都是注册在根级别的Dependency Injector中)
  • imports:导入其他module,其它module暴露的出的Components、Directives、Pipes等可以在本module的组件中被使用。比如导入CommonModule后就可以使用NgIf、NgFor等指令。
  • exports:用来控制将哪些内部成员暴露给外部使用。导入一个module并不意味着会自动导入这个module内部导入的module所暴露出的公共成员。除非导入的这个module把它内部导入的module写到exports中。
  • bootstrap:通常是app启动的根组件,一般只有一个component。bootstrap中的组件会自动被放入到entryComponents中。
  • entryCompoenents: 不会再模板中被引用到的组件。这个属性一般情况下只有ng自己使用,一般是bootstrap组件或者路由组件,ng会自动把bootstrap、路由组件放入其中。 除非不通过路由动态将component加入到dom中,否则不会用到这个属性。

每个Angular2的应用都至少有一个模块即跟模块。

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与根模块的创建方式一样,所有的模块共享一个运行期上下文和依赖注入器。

功能模块与根模块的职责区别主要有以下两点:

  • 根模块的目的在于启动app,功能模块的目的在于扩展app
  • 功能模块可以根据需要暴露或隐藏具体的实现

Angular2提供的另一个与模块有关的技术就是延迟加载了。默认情况下Angular2将所有的代码打包成一个文件,目的是为了提高应用的流畅性,但是如果是运行在mobile中的app,加载一个大文件可能会过慢,所以rc5提供了一种延迟加载方式。

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'指明了模块的路径,和模块的名称。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery ajax 同步异步的执行 return值不能取得的解决方案
Jan 08 Javascript
浅谈JavaScript中的string拥有方法的原因
Aug 28 Javascript
使用jquery.qrcode.js生成二维码插件
Oct 17 Javascript
AngularJS实现网站换肤实例
Feb 19 Javascript
bootstrap输入框组件使用方法详解
Jan 19 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
Aug 18 jQuery
jQuery+Cookie实现切换皮肤功能【附源码下载】
Mar 25 jQuery
element-ui多文件上传的实现示例
Apr 10 Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 Javascript
JS中FormData类实现文件上传
Mar 27 Javascript
vue实现数字滚动效果
Jun 29 Javascript
JS猜数字游戏实例讲解
Jun 30 Javascript
Angular2学习笔记——详解路由器模型(Router)
Dec 02 #Javascript
基于jQuery实现的幻灯图片切换
Dec 02 #Javascript
JavaScript中清空数组的方法总结
Dec 02 #Javascript
浅谈js中几种实用的跨域方法原理详解
Dec 02 #Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
Dec 02 #Javascript
探讨跨域请求资源的几种方式(总结)
Dec 02 #Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 #Javascript
You might like
php addslashes 函数详细分析说明
2009/06/23 PHP
PHP基础知识回顾
2012/08/16 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
解析javascript 浏览器关闭事件
2013/07/08 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python入门之modf()方法的使用
2015/05/15 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
Python下opencv图像阈值处理的使用笔记
2019/08/04 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
应用心理学专业求职信
2014/08/04 职场文书
工作时间调整通知
2015/04/24 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
python实现简单倒计时功能
2021/04/21 Python
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android