
Angular 17 引入的 @for 控制流语法支持条件渲染与上下文变量(如 $first),可轻松实现跳过数组首项的遍历,无需额外切片或管道。
angular 17 引入的 `@for` 控制流语法支持条件渲染与上下文变量(如 `$first`),可轻松实现跳过数组首项的遍历,无需额外切片或管道。
Angular 17 彻底弃用了旧版 *ngFor,转而采用更高效、更声明式的控制流语法 @for。它不仅提升了渲染性能,还内置了丰富的上下文变量(如 $first、$last、$index、$even、$odd),使条件化渲染变得直观简洁。
要实现“显示数组中除第一项外的所有元素”,最推荐的方式是结合 @if 与 $first 上下文变量:
@for (item of arr; let first = $first; track $index) {
@if (!first) {
<div>{{ item }}</div>
}
}✅ 优势说明:
- let first = $first 将当前迭代是否为首个元素的布尔值绑定到局部变量 first;
- @if (!first) 精准过滤掉首项,后续每一项均被渲染;
- track $index 提供稳定追踪策略(适用于简单数组,若含对象建议改用 track item.id);
- 语义清晰、无副作用,不修改原始数组,也不依赖 slice(1) 等运行时操作。
⚠️ 注意事项:
- @for 是 Angular 17+ 的全新控制流语法,需确保项目已启用 controlFlow 功能(Angular CLI 17 默认启用,但需确认 tsconfig.json 中未禁用);
- 若数组为空或仅含一项,@if (!first) 自然不渲染任何内容,行为安全可靠;
- 避免在 @if 内部嵌套复杂逻辑——如需更复杂的过滤(如跳过前 N 项),建议先在组件中预处理数据(例如 this.displayedItems = this.arr.slice(1)),再用 @for 直接遍历,兼顾可读性与性能。
? 扩展技巧:
想跳过前两项?可用 let index = $index + @if (index >= 2);
想仅显示最后三项?配合 $last 和 $index 计算即可,但更推荐业务逻辑前置处理,保持模板纯净。
总之,@for + @if 的组合是 Angular 17 中处理条件遍历的现代、推荐方式——简洁、高效、可维护。

















