Angular boshqaruv oqimi (control flow)
Boshqaruv oqimi direktivalari (@if , @for , @switch ) shablonlarda shoxchalar, ro‘yxatlar va holatlarni ko‘rsatadi va yangi kod uchun eski *ngIf/*ngFor/[ngSwitch] o‘rnini bosadi.
Boshqaruv oqimi asoslari
@if: ixtiyoriy/else bilan shartli bloklar.elseif@for: Barqaror identifikatsiya uchuntrackva bo‘sh holatlar uchun ixtiyoriy@emptybilan sikllar.@switch: Mos keladigan holatni tanlaydi va ko‘rsatadi.- Angular 17+ da yangi kod uchun afzal; eski
*ngIf/*ngFor/[ngSwitch]qo‘llab-quvvatlanadi.
@if (score > 90) { <p>A</p> } @else if (score > 75) { <p>B</p> } @else { <p>C</p> }
<ul>
@for (it of items; track it.id) { <li>{{ it.label }}</li> } @empty { <li>No items</li> }
</ul>
@switch (status) {
@case ('pending') { <p>Pending</p> }
@case ('done') { <p>Done</p> }
@default { <p>Unknown</p> }
}
Kod tushuntirildi
@if ... @else: Shart asosida turli bloklarni ko‘rsatish uchun filiallar.@for (...; track ...): DOMdan qayta foydalanish uchun barqaror identifikatorlarni saqlash uchuntracktakrorlaydi va foydalanadi.@switch/@case/@default: Mos keladigan holatni tanlaydi va ko‘rsatadi.
Eslatmalar:
- Tegishli: Shablonlar, ko‘rsatmalar va ro‘yxatlarga qarang.
- Ro‘yxatni barqaror ko‘rsatish uchun
@fordantrackbilan foydalaning. - O‘qilishi mumkin bo‘lgan filiallar uchun
@if ...; elsedan foydalaning.
Oqimni boshqarish asoslari
Kontentni @if ...; else bilan almashtiring.
@for bilan takrorlang va barqaror DOM yangilanishlari uchun track ifodasini qo‘shing.
@if (show) { <p>Visible</p> } @else { <p>Hidden</p> }
@for (item of items; track item) { <li>{{ item }}</li> }
Misol
Kontentni @if bilan almashtiring va track ifodasi yordamida @for ro‘yxatini ko‘rsating:
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component, signal } from '@angular/core';
@Component({
selector: 'app-root',
standalone: true,
template: `
<h3>Control Flow</h3>
<button (click)="show.set(!show())">Toggle</button>
<button (click)="items.set([])">Clear</button>
<button (click)="reset()">Reset</button>
@if (show()) {
<p>Visible</p>
} @else {
<p>Hidden</p>
}
<ul>
@for (item of items(); track item) {
<li>{{ item }}</li>
} @empty {
<li>No items</li>
}
</ul>
`
})
export class App {
show = signal(true);
items = signal(['One','Two','Three']);
reset() { this.items.set(['One','Two','Three']); }
}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
@if ... @else:show()signali asosida paragrafni almashtiradi.@for ... track item:items()signalidan ro‘yxatni ko‘rsatadi vatrackbilan DOMni saqlaydi.@empty: Ro‘yxat bo‘sh bo‘lganda zaxirani ko‘rsatadi.- Signallar: tugmalar yangilanadi
showvaitems, ular ko‘rinishni qayta ko‘rsatadi.
Eslatmalar:
- Trekdan foydalanish: obyektlar ro‘yxati uchun barqaror kalit (masalan,
track it.id) orqali kuzatishni afzal ko‘ring; primitivlar uchuntrack itemyaxshi. - Signallar: Shablonlarda
sig()li signallarni o‘qing (masalan,@if (flag()),@for (x of list())). - Eski ekvivalentlik:
*ngForichida@fortrekka mos kelish uchundan foydalaning.trackBy - Eski sintaksis:
*ngIf/*ngFor/[ngSwitch]qo‘llab-quvvatlanadi; yangi kod uchun@if/@for/@switch-ni tanlang. - TS da mantiqni saqlang: Komponentdagi bayroqlar va olingan massivlarni hisoblash; shablonlarni oddiy saqlang.
- Nojo‘ya ta’sirlar yo‘q: nazorat oqimi bloklari ichidagi nojo‘ya ta’sirlardan saqlaning; ishlov beruvchilar/xizmatlar holatini yangilash.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
