Angular Control Flow Syntax ใหม่: @if, @for, @switch แทน *ngIf, *ngFor
#angular12 เม.ย. 2569
Control Flow ใหม่ใน Angular 17
Angular 17 แนะนำ built-in control flow syntax ใหม่ที่ใช้ @ prefix แทน structural directives เดิม ทำให้โค้ดอ่านง่ายขึ้นและ performance ดีขึ้น
@if แทน *ngIf
<!-- เดิม -->
<div *ngIf="isLoggedIn; else loginBlock">
ยินดีต้อนรับ
</div>
<ng-template #loginBlock>
<p>กรุณาเข้าสู่ระบบ</p>
</ng-template>
<!-- ใหม่ -->
@if (isLoggedIn) {
<div>ยินดีต้อนรับ</div>
} @else {
<p>กรุณาเข้าสู่ระบบ</p>
}
@for แทน *ngFor
<!-- เดิม -->
<li *ngFor="let user of users; trackBy: trackById">
{{ user.name }}
</li>
<!-- ใหม่ - track เป็น required -->
@for (user of users; track user.id) {
<li>{{ user.name }}</li>
} @empty {
<li>ไม่มีข้อมูล</li>
}
@switch แทน ngSwitch
<!-- เดิม -->
<div [ngSwitch]="status">
<p *ngSwitchCase="'active'">ใช้งานอยู่</p>
<p *ngSwitchCase="'inactive'">ไม่ได้ใช้งาน</p>
<p *ngSwitchDefault>ไม่ทราบสถานะ</p>
</div>
<!-- ใหม่ -->
@switch (status) {
@case ('active') { <p>ใช้งานอยู่</p> }
@case ('inactive') { <p>ไม่ได้ใช้งาน</p> }
@default { <p>ไม่ทราบสถานะ</p> }
}
ข้อดีของ Control Flow ใหม่
- ไม่ต้อง import CommonModule หรือ NgIf, NgFor
- Type narrowing ทำงานได้ดีกว่า
- Performance ดีกว่าเพราะ compile เป็น optimized code
- @empty ใน @for ช่วยจัดการ empty state ได้ง่าย
Migration
ng generate @angular/core:control-flow
สรุป
Control Flow ใหม่เป็น default ใน Angular 17+ ควรเริ่มใช้ในโปรเจ็คใหม่ทันที และ migrate โปรเจ็คเก่าด้วย schematic ครับ