angular2 NgModel模块的具体使用方法


Posted in Javascript onApril 10, 2019

angular2 NgModel 模块

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

NgModule 的API

interface NgModule {
   // providers: 这个选项是一个数组,需要我们列出我们这个模块的一些需要共用的服务
   //      然后我们就可以在这个模块的各个组件中通过依赖注入使用了.
  providers : Provider[]
   // declarations: 数组类型的选项, 用来声明属于这个模块的指令,管道等等.
   //        然后我们就可以在这个模块中使用它们了.
  declarations : Array<Type<any>|any[]>
   // imports: 数组类型的选项,我们的模块需要依赖的一些其他的模块,这样做的目的使我们这个模块
   //     可以直接使用别的模块提供的一些指令,组件等等.
  imports : Array<Type<any>|ModuleWithProviders|any[]>
   // exports: 数组类型的选项,我们这个模块需要导出的一些组件,指令,模块等;
   //     如果别的模块导入了我们这个模块,
   //     那么别的模块就可以直接使用我们在这里导出的组件,指令模块等.
  exports : Array<Type<any>|any[]>
  // entryComponents: 数组类型的选项,指定一系列的组件,这些组件将会在这个模块定义的时候进行编译
  //         Angular会为每一个组件创建一个ComponentFactory然后把它存储在ComponentFactoryResolver
  entryComponents : Array<Type<any>|any[]>
  // bootstrap: 数组类型选项, 指定了这个模块启动的时候应该启动的组件.当然这些组件会被自动的加入到entryComponents中去
  bootstrap : Array<Type<any>|any[]>
  // schemas: 不属于Angular的组件或者指令的元素或者属性都需要在这里进行声明.
  schemas : Array<SchemaMetadata|any[]>
  // id: 字符串类型的选项,模块的隐藏ID,它可以是一个名字或者一个路径;用来在getModuleFactory区别模块,如果这个属性是undefined
  //   那么这个模块将不会被注册.
  id : string
 }

常用API简介

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中,否则不会用到这个属性。

子模块

随着程序的壮大,单一的根模块已不能清晰的划分职责,这时候便可以引入Feature Module。Feature Module与根模块的创建方式一样,所有的模块共享一个运行期上下文和依赖注入器。

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

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

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

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' }, // 可以延迟加载子模块,子模块的结构和父模块一样,它会去加载子模块中的Routes配置,并跳转对应的组件中去。
 { path: 'heroes', loadChildren: 'app/hero/hero.module#HeroModule' }
];

export const routing: ModuleWithProviders = RouterModule.forRoot(routes);

其中,path指明路径,loadChildren指明使用延迟加载,'app/crisis/crisis.module#CrisisModule'指明了模块的路径,和模块的名称。

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

Javascript 相关文章推荐
javascript中的变量作用域以及变量提升详细介绍
Oct 24 Javascript
node.js中的console.assert方法使用说明
Dec 10 Javascript
jQuery仿天猫实现超炫的加入购物车
May 04 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
Jun 16 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
解析Javascript单例模式概念与实例
Dec 05 Javascript
jquery插入兄弟节点的操作方法
Dec 07 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
Jan 25 Javascript
p5.js实现斐波那契螺旋的示例代码
Mar 22 Javascript
详解使用jQuery.i18n.properties实现js国际化
May 04 jQuery
微信小程序云开发如何使用云函数生成二维码
May 18 Javascript
bootstrap tooltips在 angularJS中的使用方法
Apr 10 #Javascript
javascript判断一个变量是数组还是对象
Apr 10 #Javascript
Angular CLI 使用教程指南参考小结
Apr 10 #Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
Apr 10 #Javascript
element-ui多文件上传的实现示例
Apr 10 #Javascript
基于mpvue搭建微信小程序项目框架的教程详解
Apr 10 #Javascript
Webpack4+Babel7+ES6兼容IE8的实现
Apr 10 #Javascript
You might like
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
PHP简单日历实现方法
2016/07/20 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
JScript的条件编译
2007/05/29 Javascript
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
python自动裁剪图像代码分享
2017/11/25 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
python能做哪方面的工作
2020/06/15 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
青年创业培训欢迎词
2014/01/10 职场文书
电信营业员自我评价分享
2014/01/17 职场文书
医药个人求职信范文
2014/01/29 职场文书
公司员工活动策划方案
2014/08/20 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
python 单机五子棋对战游戏
2022/04/28 Python