模板引擎是 Web 应用中用来生成动态 HTML 的一个途径, 负责将数据模型与 HTML 模板结合起来(即模板渲染),生成最终的 HTML。 编写 HTML 模板的语法称为模板语法,模板语法的表达能力和可扩展性决定了模板引擎的易用性。本文将介绍在重构管理控制台中使用到的Angular的模板引擎ng-template。
ng-template 简介
ng-template表示为 Angular 模板:这意味着此标记的内容将包含模板的一部分,然后可以与其他模板一起组合以形成最终的组件模板。
ng-template主要包括:ng-container、ngIf,ngFor、ngClass、ngStyle和ngSwitch。
ng-container
ng-container是一个逻辑容器,是 Angular 结构型指令中的一种,用于包含控制内部元素的显示与否。
ng-container可以包含任何元素,包括文本,但本身不会生成元素标签,也不会影响页面样式和布局。包含的内容,如果不通过其他指令控制,会直接渲染到页面中。
基本语法
<div> <ng-container> <p>This is paragraph 1.</p> <p>This is paragraph 2.</p> </ng-container></div>
复制代码
渲染后
<div> <p>This is paragraph 1.</p> <p>This is paragraph 2.</p></div>
复制代码
ngIf
ngIf 用于根据表达式的值,在指定位置渲染 then 或 else 模板的内容。
* `then` 模板除非绑定到不同的值,否则默认是 ngIf 指令关联的内联模板。
* `else` 模板除非绑定对应的值,否则默认是 null。
复制代码
简单形式
<div *ngIf="!isLoggedIn"> Please login, friend.</div>
<!-- logic && operator --><div *ngIf="isLoggedIn && !isNewUser"> Welcome back, friend.</div>
<!-- logic OR operator --><div *ngIf="isLoggedIn || isNewUser"> Welcome!</div>
复制代码
使用 else 块
<div *ngIf="isLoggedIn; else loggedOut"> Welcome back, friend.</div>
<ng-template #loggedOut> Please friend, login.</ng-template>
复制代码
使用 then 和 else 块
<ng-container *ngIf="isLoggedIn; then loggedIn; else loggedOut"></ng-container>
<ng-template #loggedIn> <div> Welcome back, friend. </div></ng-template><ng-template #loggedOut> <div> Please friend, login. </div></ng-template>
复制代码
ngFor
ngFor用于使用可迭代的每个项作为模板的上下文来重复模板的一种方式。提供了可以被局部变量别名的其他值:
index - 当前项目的位置在从 0 开始的迭代中
first - 如果当前项是可迭代中的第一个项,则为 true
last - 如果当前项是可迭代中的最后一个项,则为 true
even - 如果当前索引为偶数,则为 true
odd - 如果当前索引是奇数,则为 true
<mat-list-item *ngFor="let event of events"> <h3 matLine>{{event.title}}</h3> <p matLine class="secondary-text">{{event.detail}}</p></mat-list-item>
复制代码
ngClass
ngClass指令更改绑定到其附加的组件或元素的 class 属性。
<a class="favorite" [ngClass]="[isFavorite ? 'text-dark' : 'text-gray']" (click)="setFavorite()"> <i class="fe fe-heart font-size-21"></i></a>
复制代码
ngClass第一个参数为类名称,第二个参数为 boolean 值,如果为 true 就添加第一个参数的类。
ngStyle
ngStyle来修改组件或元素的 style 属性。
<div class="label-color" [ngStyle]="{'background-color': labels | getById:labelId:'color'}"></div>// 判断添加<div [ngStyle]="{'background-color':template === 'dark' ? 'dark' : 'light' }"></<div>
复制代码
ngSwitch
ng-switch根据表达式的值显示或这隐藏对应部分。
<div ng-switch="表达式/变量"> <div ng-switch-when="value"></div> <div ng-switch-when="value"></div> <div ng-switch-when="value"></div> <div ng-switch-default></div></div>
复制代码
完
评论