1. 指令说明

Angular2 指令是构成Angular2应用程序的重要组成部分,指令主要用来对模板的标签或者元素附加一些新的特性或者功能,改变一个 DOM 元素的外观或行为,Angular2指令和组件十分类似,也有由模块,注解,元数据以及组件类组成,实际上组件继承于指令,不同的是指令没有模板的信息,主要存在两种类型的指令:

l 结构型指令:会通过添加 / 删除 DOM 元素来更改 DOM 树布局

l 属性型指令:指令改变一个元素的外观或行为。

2. 结构型指令

结构性指令一般都使用的是内置的结构性指令,常见的内置结构性指令有ngIf,ngFor,ngSwitch等。这三个指令比较常用来改变DOM的结构

名称

用法

说明

ngIf

<section *ngIf="showSection">

基于showSection表达式的值移除或重新创建部分DOM树。

ngFor

<li *ngFor="let item of list">

把li元素及其内容转化成一个模板,并用它来为列表中的每个条目初始化视图。

ngSwitch

ngSwitchWhen

ngSwitchDefault

<div [ngSwitch]="conditionExpression">
  <template [ngSwitchWhen]="case1Exp">...</template>
  <template ngSwitchWhen="case2LiteralString">...</template>
  <template ngSwitchDefault>...</template>
</div>

基于conditionExpression的当前值,从内嵌模板中选取一个,有条件的切换div的内容。

3. 属性型指令

常见的内置属性型指令有以下几个,ngModel,ngClass等

名称

用法

说明

ngModel

<input [(ngModel)]="userName">

提供双向绑定,为表单控件提供解析和验证。

ngClass

<div [ngClass]="{active: isActive, disabled: isDisabled}"></div>

把一个元素上CSS类的出现与否,绑定到一个真值映射表上。右侧的表达式应该返回类似{class-name: true/false}的映射表。

4. 自定义指令

指令主要包括模块,注解,元数据,指令类等几部分,和组件类似。

我们来实现一个简单的自定义组件的例子,当鼠标滑过移动到当前元素的时候字体变大移除的时候字体恢复原样。

4.1 模块

首先我们引入对应的模块及函数等

import { Directive, ElementRef, HostListener}
from '@angular/core';

4.2 注解

从@angular/core中导入Directive函数后,可以使用@ Directive ()来标示组件类为一个Directive,@标示注解的一种标识,用来普通类附加对应的元数据信息。

4.3 元数据

@Directive将元数据的信息附加到类上,我们来了解一下常用的元数据信息都有哪些:

@Directive({

selector: '[fontIn]',

providers: [PrService]

})

selector:选择器名称,在组件使用过程中,充当模板中的标识,类似a标签中的a。这个属性信息是必须的,必须精确的指定在模板中所使用的标签定义,可以为属性,标签或者样式类等,本例子使用属性型指令的方式,选择器为fontIn属性。

providers:服务提供者集合,依赖注入系统的部分,配置了那些新的服务会引入到指令类中进行使用。

4.4 指令类

组件类作为组件的核心代码区域,包含了组件的逻辑以及视图的显示数据信息。

我们要实现对指定的元素的样式进行修改,当鼠标滑过移动到当前元素的时候字体变大移除的时候字体恢复原样。

(1). 首先我们在指令类的构造函数中引入ElementRef类,通过依赖注入获取当前指令所在的元素信息

constructor(elementRef: ElementRef) {

this.element = elementRef.nativeElement;

this.size = this.element.style.fontSize

}

(2). 引入HostListener函数,在该指令的包含元素上附加监听事件'mouseenter','mouseleave’,当鼠标事件触发是会执行指定的onMouseEnter和onMouseLeave事件。

@HostListener('mouseenter')

onMouseEnter() {

this.setFont(true);

}

@HostListener('mouseleave')

onMouseLeave() {

this.setFont(false);

}

setFont(org: boolean) {

if
(org) {

this.element.style.fontSize = "larger";

}
else {

this.element.style.fontSize = this.size;

}

}

最后实现的代码如下所示:

import { Directive, ElementRef, HostListener}
from '@angular/core';

@Directive({

selector: '[fontIn]'

})

export class FontInDirective {

private
element: HTMLElement;

private
size: string

constructor(elementRef: ElementRef) {

this.element = elementRef.nativeElement;

this.size = this.element.style.fontSize

}

@HostListener('mouseenter')

onMouseEnter() {

this.setFont(true);

}

@HostListener('mouseleave')

onMouseLeave() {

this.setFont(false);

}

setFont(org: boolean) {

if
(org) {

this.element.style.fontSize = "larger";

}
else {

this.element.style.fontSize = this.size;

}

}

}

Angular2 指令的更多相关文章

  1. 迈向angularjs2系列(2):angular2指令详解

    一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...

  2. angular2的生命周期钩子的使用情况

    angular 2 Directive Lifecycleangular2 中组建继承于指令,并扩展了与ui视图相关的属性.angular2 指令的生命周期是用来记录指令从创建,应用及销毁的过程.an ...

  3. bootstrap4中文版(纯手工翻译)

    1初步开始 1.1依赖 这个仓储包含一系列基于bootstrap标识和css样式的原生angular2指令.所以是不需要依赖jq和bootstrap.js的.只需要以下依赖即可: Angular(需要 ...

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

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

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

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

  6. angular2的ngfor ngif指令嵌套

    angular2的ngfor ngif指令嵌套 ng2 结构指令不能直接嵌套使用,可使用<ng-container>标签来包裹指令 示例如下: <ul> <ng-cont ...

  7. Angular2 内置指令 NgFor 和 NgIf 详解

    http://www.jb51.net/article/89781.htm 在这一章节中,我们来学习如何使用Angular2来展示数据,以及如何使用它的内置指令NgFor和NgIf 首先要确保你有一个 ...

  8. angular2路由之routerLinkActive指令

    angular2的routerLinkActive指令在路由激活时添加样式class .red{  color: red;}    <a routerLink="/user/login ...

  9. angular2采用自定义指令(Directive)方式加载jquery插件

    由于angular2兴起不久,相关插件还是很少,所以有时候不得不用一些jquery插件来完成项目, 那么如何把jquery插件放到angular2中呢?采用自定义指令! 在上下文之前要引入jquery ...

随机推荐

  1. 在intellj idea下用sbt的坑

    version : SBT 0.13.7 intellij 14 新建SBT项目以后无法编译,总是显示 Can not resolve symble stackoverflow 给出了暂时的解决办法. ...

  2. 对称矩阵、Hermite矩阵、正交矩阵、酉矩阵、奇异矩阵、正规矩阵、幂等矩阵

    2016-01-27 21:03 524人阅读 评论(0) 收藏 举报 分类: 理论/笔记(20) 版权声明:本文为博主原创文章,转载请注明出处,谢谢! 题目:对称矩阵.Hermite矩阵.正交矩阵. ...

  3. python脚本实现scp上传下载功能

    普通版本 1 # -*- coding:utf-8 -*- import paramiko,os,sys,time port = 22 user = 'root' def ssh_scp_put(ip ...

  4. hdu3530 单调队列

    Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  5. bzoj1584

    1584: [Usaco2009 Mar]Cleaning Up 打扫卫生 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 467  Solved: 31 ...

  6. Ubuntu 14.10安装手记

    1. Ubuntu系统安装 按照 www.linuxidc.com/Linux/2014-04/100369.htm 的安装方法即可. 配置文件有两个需要注意的地方.一.搞清楚电脑的分区表,c盘是hd ...

  7. Flymeos插桩适配教程

    插桩适配前提,安装Ubuntu或者其他linux系统. 安装JDK7 sudo apt--jdk Ubuntu 16.04与基于它的版本,需要添加源 sudo add-apt-repository p ...

  8. Graphics绘图闪烁的问题

    加入获取的boardPanel.CreateGraphics()时候 用这个g去g.Clear(BackColor);时候会闪烁. 解决办法:  在绘图的时候 用 绘图的image的Graphics. ...

  9. 亿级 Web 系统的容错性建设实践

    一. 重试机制 最容易也最简单被人想到的容错方式,当然就是“失败重试”,总而言之,简单粗暴!简单是指它的实现通常很简单,粗暴则是指使用不当,很可能会带来系统“雪崩”的风险,因为重试意味着对后端服务的双 ...

  10. <<< jquery向id元素后面动态添加元素

    html代码: <div id="main"> <div>1</div> <div>1</div> </div&g ...