Angular模板指令

468 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

模板指令

指令是对DOM的拓展,为元素提供更多的功能。

在ng6中,只能要使用驼峰式命名,并且属性值是字符串, 例如 ngStyle=””

让指令的属性值变成js环境,我们要使用[]语法糖

为了控制元素的创建,ng6提供了一组模板指令

一个指令只能控制一个元素,想控制多个元素,我们要使用模板组件

模板组件

在vue中,通过template定义模板组件

在ng6中,通过ng-template定义模板组件

是一个模板组件,默认不会渲染出来,但是可以像元素一样,添加属性等等

在ng6中模板组件跟普通的元素不同的,在使用模板指令的时候语法不一样

普通的元素,使用模板指令,要使用*语法糖

ng-template模板组件,使用模板指令,要使用[]语法糖

条件模板指令

在vue中,通过v-if定义条件模板指令

在ng6中,通过ngIf定义条件模板指令

对普通元素使用,要使用*语法糖。

对模板组件使用,要使用[]语法糖

使用语法糖后,属性值是js环境

值为true要创建该元素

值为false要删除该元素。

多分支条件模板指令

在vue中,通过v-if,v-else-if,v-else等指令定义多分支条件模板指令

在ng6中,通过模拟js中switch语句实现的

js中定义switch语句

swtich () {

    case:;

    case:;

    default:;
}

ng6提供了ngSwitch,ngSwitchCase,ngSwitchDefault指令,实现多分支条件模板指令

通过ngSwitch定义条件,没有控制元素创建,所以要使用[]语法糖

ngSwitchCase与ngSwitchDefault要控制元素的创建,因此要使用*语法糖

ngSwitchCase的属性值是条件值,是js环境,字符串要加引号

ngSwitchDefault不需要设置属性值

举例:

<!-- 普通元素使用*语法糖 -->
<h1 *ngIf="isShow">template works!</h1>
<!-- 控制多个元素 -->
<ng-template [ngIf]="isShow">
    <h1>学习</h1>
    <h2>菜鸟学习</h2>
</ng-template>
<!-- 选项卡 -->
<button (click)="togglePage('home')">home</button>
<button (click)="togglePage('list')">list</button>
<button (click)="togglePage('detail')">detail</button>
<!-- 定义三个页面 -->
<div [ngSwitch]="page">
    <!-- 定义条件 -->
    <h1 *ngSwitchCase="'home'">home page</h1>
    <h1 *ngSwitchCase="abc">list page</h1>
    <!-- 默认的 -->
    <h1 *ngSwitchDefault>detail page</h1>
</div>
<h1>{{page}}</h1>

循环模板指令

vue中,循环模板指令通过v-for=”item in data”

ng6中,循环模板指令通过ngFor定义的

语法 *ngFor=”let item of data” 

let和of表示关键字

data 表示遍历的数据

item 表示成员值

 除了item循环变量之外,还提供了一些循环变量

index 索引值

first 是否是第一次

last 是否是最后一次

odd 是否是奇数次

even 是否是偶数次

注意:计算机是从0开始计数的,因此

计算机中的偶数次,就是人看到的奇数次

计算机中的奇数次,就是人看到的偶数次

虽然存在这些循环变量,但是我们无法直接使用,必须先定义再使用

index as $index

此时$index就代表索引值了

当使用循环模板指令控制多个元素的时候,就要使用模板组件ng-template

此时语法有些改变

ngFor 声明循环指令

[ngForOf]=”data”  定义循环的数据

let-item 定义循环变量

举例:

<ul>
    <li *ngFor="let item of colors; index as index; first as f; last as $last; even as even; odd as odd">{{item}}--{{index}}--{{f}}--{{$last}}--{{even}}--{{odd}}</li>
    <li *ngFor="let item of colors; index as index; first as f; last as $last; even as even; odd as odd" [style.backgroundColor]="even ? '#efefef' : 'yellowgreen'">{{item}}--{{index}}--{{f}}--{{$last}}--{{even}}--{{odd}}</li>
    </ul>
    <!-- 控制多个元素,使用模板标签 -->
    <ul>
    <ng-template ngFor [ngForOf]="colors" let-item>
    <h1>{{item}}</h1>
    <h2>{{item}}</h2>
    </ng-template>
</ul>