你将学到什么
在 Angular 的世界里,控制 DOM 是日常操作的核心。而实现这种控制的有力武器之一,就是指令。具体来说,它有两种形态。属性指令负责修改 DOM 元素的外观或行为,而结构指令则更彻底——直接添加或移除 DOM 元素。

毫不夸张地说,结构指令是 Angular 中最强大的特性之一,但也恰恰因为它的强大,频繁被开发者误解。
如果你也想彻底弄清楚结构指令到底是什么、能解决什么问题、以及如何在项目中优雅地使用它们,那么这篇文章值得往下看。我们会从基础模式讲起,逐步深入到实际用法。
读完本文,你不仅能搞懂几种标准结构指令的工作原理,还能在真实场景下做出更合适的应用决策。
Angular 结构指令是什么?
一句话概括:Angular 结构指令是那些能改变 DOM 结构的指令。它能添加元素、移除元素,甚至替换元素。一眼就能认出来的标志是,这些指令的名字前都带有一个星号 *。
Angular 内置了三种标准的结构化指令,在日常开发中间出场率极高:
*ngIf—— 根据表达式返回值(true 或 false)来决定是否渲染对应模版*ngFor—— 遍历数组并渲染每一项*ngSwitch—— 根据匹配条件渲染对应的视图
一个典型的结构指令用法长这样:
这里的条件表达式必须返回布尔值。举个具体的例子:
{{worker.name}}
Angular 在背后会把它展开为一个 元素,同时将 *ngIf 指令转换成属性绑定的形式,也就是 [ngIf]。但这个转换是个技术细节,你直接写 *ngIf 完全没问题。最终, 的其余内容(包括类名和插值表达式)都会被自动插入到这个 里。实际生成的代码类似这样:
{{worker.name}}
Angular 结构指令是怎么工作的?
用法上很直白:在 HTML 模版中找到一个元素,附加一个结构指令,然后根据指令中设置的条件或表达式的值,框架自动决定是添加、删除还是替换这个元素。整个过程对开发者是透明的,高效且简洁。
结构指令的例子
为了看得更直观,我们可以先搭一个简单的 HTML 页面作为演练场。
在 app.component.html 中写下:
Welcome
怎么使用 *ngIf 指令
*ngIf 的核心逻辑跟 if-else 语句非常像:条件为真,元素渲染到 DOM 中;条件为假,元素从 DOM 中移除。它不是隐藏,而是实实在在地移除。
Hello
Good morning to you,click the button to view
Today is Monday and this is a dummy text element to make you feel better
Understanding the ngIf directive with the else clause
注意看:当你点击按钮时,toggleOn 值取反,*ngIf 根据这个新值决定是否渲染那一段内容。
怎么使用 *ngFor 指令
*ngFor 就是 Angular 中的循环指令。比如你想渲染一个员工列表:
- {{ wok }}
对应的组件 TypeScript 文件:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-illustrations',
templateUrl: './illustrations.component.html',
styleUrls: ['./illustrations.component.css']
})
export class IllustrationsComponent implements OnInit {
workers: any = [
'worker 1',
'worker 2',
'worker 3',
'worker 4',
'worker 5',
]
constructor() { }
ngOnInit(): void {
}
}
这段代码会生成一个包含五个列表项的无序列表,每个项对应数组中的一条记录。
怎么使用 *ngSwitch 指令
在实际开发中,*ngSwitch 出镜率非常高,尤其是在需要根据某个变量的值从多个备选模版中选择性地渲染一个时。
cups
Vegetables
Trousers
My Shopping
在 TypeScript 中只需定义一个变量:
Myshopping: string = '';
逻辑很直观:根据 Myshopping 的值,匹配对应的 *ngSwitchCase。匹配成功的元素会被渲染到 DOM 中,其余分支则被忽略。如果没有条件匹配,就会渲染 *ngSwitchDefault 的内容。
Angular 中我们什么时候需要用结构指令呢?
答案其实挺简单的:当你想在 DOM 中添加或移除一个元素时,直接使用结构指令。当然,它们的用途不止于此,你还可以借它们来改变元素的 CSS 样式、附加事件监听器,甚至动态创建出原本不存在的元素。
最实用的判断标准是:只要你在考虑操作 DOM,就请优先想起结构指令。
总结
结构指令在 Angular 中扮演着至关重要的角色,它们的使用方式非常灵活。功能上完全可以覆盖日常开发中大部分关于 DOM 控制的场景。
希望通过这篇文章,你能更清晰地掌握这些指令的用法,同时判断出什么场景下采用哪种模式最为合理。
