Angular2 组件
1. 组件说明
Angular2 组件是构成Angular2应用程序的核心部分,Angualr2应用程序本质上来说就是一个组件树,Angular2组件一般由模块,注解,元数据以及组件类组成,实现组件类逻辑和视图模板的相互交互。来看下面的这个简单的组件的例子:

2. 模块
模块是一个内聚的代码块,用来实现某种单一的功能,可以进行导入来使用模块内的变量,类或者函数等,如下所示,组件需要导入一些该组件使用到的函数,其他组件,服务等模块,例如,从 @angular/core中导入Component函数,导入其他依赖组件HeaderComponent等。
|
import { Component, OnInit, Inject, ViewChild} from '@angular/core'; import { HeaderComponent } from './header'; import { DetailsComponent } from './details'; import { ButtonComponent } from './button'; import { EPO_PR_HEAD_P2P } from '../../model'; import { PrStore } from '../../store'; import { PrService } from '../../service'; |
3. 注解
从@angular/core中导入Component函数后,可以使用@Component()来标示组件类为一个Component,@标示注解的一种标识,用来对组件类福建对应的元数据信息。
4. 元数据
@Component将元数据的信息附加到组件类上,我们来详细了解一下常用的组件元数据信息都有哪些:
|
@Component({ moduleId: "pr-input-mkt", selector: 'pr-input-mkt', //inline template template: ` <ui-header [header]="PrEntity.header"></ui-header> <ui-details [details]="PrEntity.details"></ui-details> <ui-button [header]="PrEntity.header" (onsubmit)="dosubmit($event)"></ui-button> `, //out template templateUrl: `./template.html`, directives: [HeaderComponent, DetailsComponent, ButtonComponent], pipes: [DatePipe], providers: [PrService] }) |
moduleId:组件标识ID,用来区分各个组件,主要作用于相对路径使用组件,可以准确定位到组件。
selector:选择器名称,在组件使用过程中,充当模板中的标识,类似a标签中的a。这个属性信息是必须的,必须精确的指定在模板中所使用的标签定义,可以为属性,标签或者样式类等,例子中使用是采用标签的形式使用的。
template/templateUrl:组件对应的模板,template是组件内部的用法,引入外部模板文件使用templateUrl。
directives:在组件模板中使用的其他组件或者指令,引入以后可以在模板中进行使用。
pipes:管道集合,组件模板中使用到的管道,引入后可以在模板中进行使用。
providers:服务提供者集合,依赖注入系统的部分,配置了那些新的服务会引入到组件类中进行使用。
5. 组件类
组件类作为组件的核心代码区域,包含了组件的逻辑以及视图的显示数据信息。组件类的用户主要是体现在输入和输出两个部分。
5.1 Input
输入使用@Input()注解来表示,将父组件的数据绑定到对应的子组件的属性中。例如 HeaderComponent 组件中,使用@Input() 来附加输入属性到header上。
|
import { Component, OnInit, Input, } from '@angular/core'; import { EPO_PR_HEAD_P2P} from '../../model'; import { PrService } from '../../service'; @Component({ selector: 'ui-header', template: ` <form class="form-horizontal" role="form" (change)="change($event)"> <div class="form-group"> <legend>Form title</legend> </div> <div class="input-group"> <div class="input-group-addon">ID</div> <input type="text" class="form-control" name="ID" [ngModel]="header.ID" placeholder="Amount"> </div> </form> ` }) export class HeaderComponent implements OnInit { _init: boolean = false; @Input() header: EPO_PR_HEAD_P2P; } |
那么如何在父组件中如何调用呢,其实非常简单,实际上就是模板语法中属性的绑定方式,将父组件中的数据传递到子组件中。
|
<ui-header [header]="PrEntity.header"></ui-header> |
5.2 Output
输入使用@ Output ()注解来表示,将子组件触发的事件提交到父组件中。例如 ButtonComponent组件中,使用@ Output () 来创建一个事件触发器onsave,当点击save按钮的时候触发onsave事件,并传递对应的数据’save’。
|
import { Component, OnInit, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'ui-button', template: ` <div class="btn-group"> <button type="button" class="btn btn-default" (click)="save($event)">save</button> </div> ` }) export class ButtonComponent implements OnInit { @Output() onsave = new EventEmitter(); constructor() { } ngOnInit() { } save($event) { this.onsave.emit('save'); } } |
那么如何在父组件中如何调用呢,和组件输入相似,不过本次采用的是模板语法中事件的绑定方式,$event表示传递的参数信息,当点击子组件save按钮的时候的时候,父组件中的dosave方法便会执行。
|
<ui-button (onsave)="dosave($event)"></ui-button> |
Angular2 组件的更多相关文章
- Angular2 组件通信
1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...
- Angular2组件与指令的小实践——实现一个图片轮播组件
如果说模块系统是Angular2的灵魂,那其组件体系就是其躯体,在模块的支持下渲染出所有用户直接看得见的东西,一个项目最表层的东西就是组件呈现的视图.而除了直接看的见的躯体之外,一个完整的" ...
- angular2 组件交互
1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...
- Angular2组件与指令的小实践
如果说模块系统是Angular2的灵魂,那其组件体系就是其躯体,在模块的支持下渲染出所有用户直接看得见的东西,一个项目最表层的东西就是组件呈现的视图.而除了直接看的见的躯体之外,一个完整的" ...
- angular2+ 组件中用@import进来的css不起作用
一般来说是作用域的问题,首先你应该先看标签内是否有angular2内置生成的自定义属性比如: 在我们的@Component中,这三个是基本的设置. 页面上的标签会生成带有 _nghost-c1 和 ...
- angular2组件通讯的几种方式
最近刚刚接触angular2,对ng2也是一知半解,如有说得不对的地方欢迎指出,欢迎加q共同探讨学习991085978: 1.通过输入型绑定把数据从父组件传到子组件 HeroChildComponen ...
- angular2+ 组件间通信
angular2+ 不同于react的redux,vue的vuex,angular2+其实可实现数据状态管理的方法很多,以下方案一般也足够支撑普通业务: 父子组件通信 1.1 父组件向子组件传递信息( ...
- Angular2 组件生命周期
1. 说明 Angular每个组件都存在一个生命周期,从创建,变更到销毁.Angular提供组件生命周期钩子,把这些关键时刻暴露出来,赋予在这些关键结点和组件进行交互的能力. 2. 接口 按照生命周期 ...
- angular2 组件之间通讯-使用服务通讯模式 2016.10.27 基于正式版ng2
工作中用到ng2的组件通讯 奈何官方文档言简意赅 没说明白 自己搞明白后 整理后分享下 rxjs 不懂的看这篇文章 讲很详细 http://www.open-open.com/lib/view/ope ...
随机推荐
- httpUrlConnection中文乱码
public void getFeiInfo(String sessionId) throws IOException{ //发送的请求参数,发送的格式也是Json的 String requestSt ...
- Markdown 11种基本语法
markdown真的很方便! 我根据自己在github上维护的项目编写的readme文件总结一些最基本的使用方法 ,学完这些Markdown的基本使用已经不成问题. 1. 标题设置(让字体变大,和wo ...
- CSS基本知识6-CSS字体
首先要考虑的是文本的排版,实际上有这玩意,Word还需要吗?不需要了.我们列下文本所涉及的操作: CSS 文本属性 属性 描述 color 设置文本颜色 direction 设置文本方向. line- ...
- 【原创】O2O,你真的知道怎么玩吗?
自从2011年8月份,O2O的概念被Alex Rampell提出,并且在当年的11月份被引入中国以来,O2O这一概念就好像给久无新意的中国互联网行业,打了一针兴奋剂.O2O这个词也如麦当劳,星巴克这些 ...
- 【jQuery】 jQuery上下飘动效果
jQuery实现图片上下飘动效果 function moveRocket() { $(".smallShip") //2000毫秒内top = top + 60: .animate ...
- Excel(Access)文件共享锁定数溢出(Error 3052)的解决方法
Excel或Access均可能会提示:文件共享锁定数溢出(Error 3052),主要版本为office 2003,在其他版本上未遇到.错误提示如下: Microsoft JET Database E ...
- GitHub 上 57 款最流行的开源深度学习项目
转载:https://www.oschina.net/news/79500/57-most-popular-deep-learning-project-at-github GitHub 上 57 款最 ...
- bc#54 div2
用小号做的div2 A:竟然看错了排序顺序...白白WA了两发 注意读入一整行(包括空格):getline(cin,st) [gets也是资瓷的 #include<iostream> us ...
- 基于Arduino、STM32进行红外遥控信号接收
catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...
- 对前端的一个H5项目的所思所想
最近接触一个前端HTML5的项目,虽然我主做iOS,但曾经也徒手用html+css+js+php写过一个博客,当然表示无压力了.结果.现在的前端发展的速度真是快啊,项目中用到Jquery,reactJ ...