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>

时间: 2024-08-26 11:58:48

Angular2 组件的相关文章

迈向angularjs2系列(2):angular2组件和指令详解

<%= INIT %> 内容 一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> &l

Angular2组件开发—调用服务(三)

注入一个复杂的服务 EzAlgo相当简单,使用new或者使用Injector来获得一个实例看起来差别不大.那如果我们的EzApp组件要使用Http服务呢? 第一眼看上去,Http服务显然是一个真正有用的服务 - 因为看起来相当的复杂 - Http依赖于XHRBackend和BaseRequestOptions,而XHRBackend又依赖于BrowserXHR. 我们可以有两种方法获得一个Http的实例,以便通过它获得网络访问的功能: 1. 使用new进行实例化 如果我们使用传统的new方式创建

Angular2组件开发—模板的逻辑控制(二)

使用分支逻辑 如果组件的模板需要根据某个表达式的不同取值展示不同的片段,可以使用NgSwitch系列指令来动态切分模板.比如右边示例中的广告组件EzPromotion,需要根据来访者性别的不同推送不同的广告: NgSwitch包含一组指令,用来构造包含多分支的模板: NgSwitch NgSwitch指令可以应用在任何HTML元素上,它评估元素的ngSwitch属性值,并根据这个值 决定应用哪些template的内容(可以同时显示多个分支): 1 <any [ng-switch]="exp

Angular2组件开发—模板语法(二)

directives - 使用组件 在Angular2中,一个组件的模板内除了可以使用标准的HTML元素,也可以使用自定义的组件! 这是相当重要的特性,意味着Angular2将无偏差地对待标准的HTML元素和你自己定义的组件.这样, 你可以建立自己的领域建模语言了,这使得渲染模板和视图模型的对齐更加容易,也使得模板的语义性 更强: 声明要在模板中使用的组件 不过,在使用自定义组件之前,必需在组件的ViewAnnotation中通过directives属性声明这个组件: 1 @View({ 2 d

Angular2组件开发—调用服务(二)

注入 - Injector 在前一节的示例代码中,组件EzAlgo直接在构造函数中实例化了一个EzAlog对象,这造成了EzApp和EzAlgo的强耦合,我们可以使用Angular2的注入器/Injector进行解耦: 注入器就像婚姻介绍所,男方在婚介所登记心仪的女性特点,约好见面地点,然后, 坐等发货即可.比如上图: EzApp组件(男方)使用Component注解的Injector属性向Angular2框架(婚介所)声明其依赖于EzAlgo(登记心仪的女性特点),并在其构造函数的参数表中使用

Angular2 组件通信

1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间的交互方式主要有如下几种: l 使用输入型绑定,把数据从父组件传到子组件 l 通过 setter 拦截输入属性值的变化 l 使用 ngOnChanges 拦截输入属性值的变化 l 父组件监听子组件的事件 l 父组件与子组件通过本地变量互动 l 父组件调用 ViewChild l 父组件和子组件通过服

Angular2组件开发—调用服务(一)

服务 - 封装可复用代码 在Angular2中,服务用来封装可复用的功能性代码.比如Http服务,封装了ajax请求的细节,在不同的组件中,我们只需要调用Http服务的API接口就可以给组件增加ajax请求的功能了: Angular2中实现一个服务非常简单直接 : 定义一个类,然后,它就是服务了: 1 class EzAlgo{ 2 add(a,b){return a+b;} 3 sub(a,b){return a-b;} 4 } 上面的代码定义了一个相当弱智的算法服务EzAlgo,它有两个AP

Angular2组件开发—模板的逻辑控制(三)

NgFor- 循环逻辑 如果希望利用一组可遍历的数据动态构造模板,那么应当使用NgFor指令. 例如示例中的EzStar组件,用来展示演员的作品列表: 迭代 NgFor指令应用在template元素上,对ngForOf属性指定的数据集中的每一项 实例化一个template的内容: 1 <template ng-for="" [ng-for-of]="items"> 2 <li>----------</li> 3 </temp

Angular2组件开发—模板语法(六)

#var - 局部变量 有时模板中的不同元素间可能需要互相调用,Angular2提供一种简单的语法将元素 映射为局部变量:添加一个以#或var-开始的属性,后续的部分表示变量名, 这个变量对应元素的实例. 在下面的代码示例中,我们为元素h1定义了一个局部变量v_h1,这个变量指向 该元素对应的DOM对象,你可以在模板中的其他地方调用其方法和属性: 1 @View({ 2 template : ` 3 <h1 #v_h1>hello</h1> 4 <button (click)