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 组件的更多相关文章

  1. Angular2 组件通信

    1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...

  2. Angular2组件与指令的小实践——实现一个图片轮播组件

    如果说模块系统是Angular2的灵魂,那其组件体系就是其躯体,在模块的支持下渲染出所有用户直接看得见的东西,一个项目最表层的东西就是组件呈现的视图.而除了直接看的见的躯体之外,一个完整的" ...

  3. angular2 组件交互

    1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...

  4. Angular2组件与指令的小实践

    如果说模块系统是Angular2的灵魂,那其组件体系就是其躯体,在模块的支持下渲染出所有用户直接看得见的东西,一个项目最表层的东西就是组件呈现的视图.而除了直接看的见的躯体之外,一个完整的" ...

  5. angular2+ 组件中用@import进来的css不起作用

    一般来说是作用域的问题,首先你应该先看标签内是否有angular2内置生成的自定义属性比如: 在我们的@Component中,这三个是基本的设置. 页面上的标签会生成带有 _nghost-c1 和  ...

  6. angular2组件通讯的几种方式

    最近刚刚接触angular2,对ng2也是一知半解,如有说得不对的地方欢迎指出,欢迎加q共同探讨学习991085978: 1.通过输入型绑定把数据从父组件传到子组件 HeroChildComponen ...

  7. angular2+ 组件间通信

    angular2+ 不同于react的redux,vue的vuex,angular2+其实可实现数据状态管理的方法很多,以下方案一般也足够支撑普通业务: 父子组件通信 1.1 父组件向子组件传递信息( ...

  8. Angular2 组件生命周期

    1. 说明 Angular每个组件都存在一个生命周期,从创建,变更到销毁.Angular提供组件生命周期钩子,把这些关键时刻暴露出来,赋予在这些关键结点和组件进行交互的能力. 2. 接口 按照生命周期 ...

  9. angular2 组件之间通讯-使用服务通讯模式 2016.10.27 基于正式版ng2

    工作中用到ng2的组件通讯 奈何官方文档言简意赅 没说明白 自己搞明白后 整理后分享下 rxjs 不懂的看这篇文章 讲很详细 http://www.open-open.com/lib/view/ope ...

随机推荐

  1. mysql : utf8mb4 的问题

    微信呢称和QQ呢称上有很多火星文和emoji表情图片,这些数据,如果直接insert到mysql数据库,一般会报错,设置成utf8都不好使,必须改成utf8mb4编码,这二者的区别见: mysql u ...

  2. css的命名规则

    本文转载自谈笑涧<css的命名规则> 操作系统版本:Windows 7 浏览器版本:IE6,IE7,IE8,Firefox 3.6.2,Safari 4.0.4,Chrome 5.0.35 ...

  3. LeetCode:Count and Say

    题目链接 The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 11 ...

  4. 基于Calabash-andriod的UI自动化测试(1)-环境和原理

    有时候,一些覆盖happy path的UI自动化还是很有用的.它的一些作用如下: 1.可以迅速实现端到端的功能回归,能够覆盖接口测试覆盖不到的一些地方,如GUI层和接口层的交互产生的问题. 2.非码农 ...

  5. Apache配置手札

    一.绑定域名到子目录 在httpd.conf文件末尾添加 #不同的域名对应到的目录 <VirtualHost *:80> DocumentRoot "D:\wamp\www\ba ...

  6. 对.net技术组件的分析和选择

    .net很庞杂,学习最忌讳什么?为了学而学,而不是为了用而学.我们不是为了成为教师,所以不要成为书呆子,不要成为"博士",要从庞杂的技术群中选择自己需要的内容进行学习. 如果不加选 ...

  7. 【jQuery】scroll 滚动到顶部

    Jquery 实现页面滚动到顶端 $(document).ready(function () { // 滚动窗口来判断按钮显示或隐藏 $(window).scroll(function () { // ...

  8. 腾讯云CentOS Apache开启HTTPS

    1.申请SSL证书 https://console.qcloud.com/ssl?utm_source=yingyongbao&utm_medium=ssl&utm_campaign= ...

  9. Ubuntu 14.04.1 建立 Android M, Android N 開發環境 與 問題

    # Modify /etc/apt/sources.list# add below 3 lines to /etc/apt/sources.listdeb http://archive.ubuntu. ...

  10. Maven代理教程

    明确代理服务器地址及端口,比如proxy.supremehover.com:8080 找到maven目录下的conf\settings.xml并打开,在proxies节点下添加proxy <pr ...