- Angular 教程
- Angular - 首页
- Angular - 概述
- Angular - 特性
- Angular - 优点与缺点
- Angular 基础
- Angular - 环境设置
- Angular - 第一个应用
- Angular - MVC 架构
- Angular 组件
- Angular - 组件
- Angular - 组件生命周期
- Angular - 视图封装
- Angular - 组件交互
- Angular - 组件样式
- Angular - 嵌套组件
- Angular - 内容投影
- Angular - 动态组件
- Angular - 元素
- Angular 模板
- Angular - 模板
- Angular - 文本插值
- Angular - 模板语句
- Angular - 模板中的变量
- Angular - SVG 作为模板
- Angular 绑定
- Angular - 绑定及其类型
- Angular - 数据绑定
- Angular - 事件绑定
- Angular - 属性绑定
- Angular - 属性绑定
- Angular - 类与样式绑定
- Angular 指令
- Angular - 指令
- Angular - 内置指令
- Angular 管道
- Angular - 管道
- Angular - 使用管道转换数据
- Angular 依赖注入
- Angular - 依赖注入
- Angular HTTP 客户端编程
- Angular - 服务
- Angular - HTTP 客户端
- Angular - 请求
- Angular - 响应
- Angular - 获取
- Angular - PUT
- Angular - DELETE
- Angular - JSON-P
- Angular - 使用 HTTP 进行 CRUD 操作
- Angular 路由
- Angular - 路由
- Angular - 导航
- Angular - Angular Material
- Angular 动画
- Angular - 动画
- Angular 表单
- Angular - 表单
- Angular - 表单验证
- Angular Service Workers 和 PWA
- Angular - Service Workers 和 PWA
- Angular 测试
- Angular - 测试概述
- Angular NgModules
- Angular - 模块简介
- Angular 高级
- Angular - 身份验证和授权
- Angular - 国际化
- Angular - 可访问性
- Angular - Web Workers
- Angular - 服务器端渲染
- Angular - Ivy 编译器
- Angular - 使用 Bazel 构建
- Angular - 向后兼容性
- Angular - 响应式编程
- Angular - 指令和组件之间共享数据
- Angular 工具
- Angular - CLI
- Angular 杂项
- Angular - 第三方控件
- Angular - 配置
- Angular - 显示数据
- Angular - 装饰器和元数据
- Angular - 基本示例
- Angular - 错误处理
- Angular - 测试和构建项目
- Angular - 生命周期钩子
- Angular - 用户输入
- Angular - 有什么新功能?
- Angular 有用资源
- Angular - 快速指南
- Angular - 有用资源
- Angular - 讨论
Angular - 模板语句
模板语句用于通过 HTML 文档中的事件与用户交互。模板语句允许开发人员响应用户操作调用组件的方法。此外,它还允许开发人员使用多个以冒号 (;) 分隔的语句在模板本身中编写简单的逻辑。在本章中,我们将进一步了解模板语句。
语法
模板语句类似于 JavaScript 表达式,但存在以下例外。
复合赋值运算符:模板语句不支持复合赋值运算符(+= 和 -=)。与模板表达式相比,语句支持普通的赋值运算符 (=)。
new 关键字:模板不允许创建新对象。任何对象都应在组件类中创建。在组件中创建的对象将在模板中可用。
增量和减量运算符:模板不允许副作用。由于增量和减量运算符具有副作用,因此它们被排除在外。
位运算符:不支持位运算符(| 和 &)。
管道运算符:模板语句不支持管道 (|) 运算符。
与模板表达式相比,语句支持赋值运算符和链式运算符(; 和 ,)
如何在模板中使用模板语句
模板语句可以写入双引号内,并将其设置为组件或元素的事件属性的值,如下所示:
<button (click)="<statements>">Click here</button>
这里,
(click) 表示按钮的点击事件。它使用事件绑定的概念,这将在事件绑定章节中进行解释。
<statement> 可以是上一节中指定的任何模板语句。
模板语句上下文
与模板表达式类似,模板语句具有三个上下文,
组件的属性/方法:组件的属性/方法是在组件实例中设置的属性/方法。例如,组件中的用户对象 (user) 可以在模板中按如下方式使用:
<button (click)="showUser(user)">Show user</button)
这里,user 属性和 showUser() 方法的上下文是组件的实例。
模板输入变量:模板输入变量是通过指令分配给模板的输入。例如,ngFor 指令将循环的索引和当前项发送到模板,如下所示:
<ul> <li *ngFor="let user of users" (click)="showUser(user)">{{user.name}}</li> </ul>
这里,user 属性的上下文是模板输入变量。
模板引用变量:模板引用变量基本上是在给定模板中表示 HTML 元素、组件和指令,如下所示:
<input #user /> <span>{{ user.value }}</span> <button (click)="showUser(user.value)">Show User</button>
这里,user 和 user.value 的上下文是模板引用变量。
在名称冲突的情况下,上下文的优先级如下:
模板变量
指令上下文的变量
组件的成员变量和方法
Angular 团队建议在组件的方法中使用复杂的逻辑,并通过模板语句调用它,而不是尝试使用模板语句在模板本身中编写逻辑。
工作示例
让我们考虑一个通过用户操作显示/隐藏部分的简单场景。
步骤 1:使用 angular CLI 创建一个新应用程序,如下所示:
$ ng new my-app
步骤 2:使用 angular CLI 创建一个组件 BlockWithShowHide,如下所示:
$ ng generate component BlockWithShowHide CREATE src/app/block-with-show-hide/block-with-show-hide.component.css (0 bytes) CREATE src/app/block-with-show-hide/block-with-show-hide.component.html (35 bytes) CREATE src/app/block-with-show-hide/block-with-show-hide.component.spec.ts (639 bytes) CREATE src/app/block-with-show-hide/block-with-show-hide.component.ts (255 bytes) UPDATE src/app/app.module.ts (525 bytes)
步骤 3:接下来,打开组件文件 src/app/block-with-show-hide/block-with-show-hide.component.ts 并添加一个变量 hideStatus 来表示显示/隐藏状态
hideStatus: boolean = false;
步骤 4:接下来,添加两个方法 show() 和 hide() 以根据用户的操作更改 hideStatus 变量的值。
show() { this.hideStatus = false; } hide() { this.hideStatus = true; }
步骤 5:接下来,打开组件的模板文件 src/app/block-with-show-hide/block-with-show-hide.component.html 并添加一个带有两个按钮的块,
<div> <div> <p>Hi, I am simple section created for the testing purpose<p> </div> <button>Hide the section</button> <button>Show the section</button> </div>
步骤 6:接下来,将点击事件添加到按钮并添加相应的的方法,如下所示:
<div> <div [class.hide]="hideStatus"> <p>Hi, I am simple section created for the testing purpose<p> </div> <button (click)="hide()">Hide the section</button> <button (click)="show()">Show the section</button> </div>
步骤 7:接下来,在要显示/隐藏的块中添加一个类属性绑定 class.hide,其值为 hideStatus。
<div> <div [class.hide]="hideStatus"> <p>Hi, I am simple section created for the testing purpose<p> </div> <button (click)="hide()">Hide the section</button> <button (click)="show()">Show the section</button> </div>
这里,
class.hide 表示隐藏 CSS 类,如果其值 hideStatus 为 true,则将设置该类。
步骤 8:组件的完整列表如下:
import { Component } from '@angular/core'; @Component({ selector: 'app-block-with-show-hide', templateUrl: './block-with-show-hide.component.html', styleUrls: ['./block-with-show-hide.component.css'] }) export class BlockWithShowHideComponent { hideStatus: boolean = false; show() { this.hideStatus = false; } hide() { this.hideStatus = true; } }
步骤 9:接下来,在 CSS 文件 src/app/block-with-show-hide/block-with-show-hide.component.css 中添加隐藏 CSS 类
.hide { display: none; }
步骤 10:接下来,打开应用程序组件的模板文件 src/app/app.component.html 并添加我们的组件,如下所示:
<app-block-with-show-hide />
步骤 11:最后,运行应用程序并检查块是否根据用户的操作显示/隐藏。
总结
模板语句使应用程序能够以安全有效的方式与用户交互,而不会牺牲代码的灵活性以及应用程序丰富的用户体验。