Angular shartli render qilish
Shartli render qilish shablon qismlarini holat (state) asosida ko‘rsatadi yoki yashiradi.
Shartli render qilish asoslari
- Shartli mantiq uchun
@if/@else if/@elsedan foydalaning. - Ko‘p ko‘rinishdan bittasini tanlash uchun
@switchdan foydalaning. - Signallar: Signallardan shartlarni boshqaring va ularni shablonlarda
sig()yordamida o‘qing. - Yashirish va olib tashlash:
@ifDOMdan olib tashlaydi; yo‘q qilmasdan yashirish uchun[hidden]yoki CSS dan foydalaning. - Legacy:
*ngIfva[ngSwitch]qo‘llab-quvvatlanadi, lekin bu yerda ko‘rsatilmaydi.
@if (condition) { <p>Shown</p> } @else { <p>Hidden</p> }
@switch (value) {
@case ('x') { <p>X</p> }
@default { <p>Other</p> }
}
<div [hidden]="!isVisible">Hidden but in DOM</div>
Eslatma:
@if/@switch/@for uchun boshqaruv oqimi (Control Flow), markup/interpolyatsiya uchun shablonlar (Templates), kiritishni qayta ishlash uchun hodisalar (Events) va to‘plamlarni render qilish uchun ro‘yxatlar (Lists) bo‘limlariga qarang.Asosiy shartli render qilish
@if/@elsebilan kontentni render qilish.- Boolean qiymatlarni signallar orqali boshqaring; shablon ifodalarini sodda saqlang.
@if (show()) { <p>Now you see me!</p> } @else { <p>Now I'm hidden.</p> }
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component, signal } from '@angular/core';
@Component({
selector: 'app-root',
standalone: true,
template: `
<h3>Conditional Rendering</h3>
<button (click)="show.set(!show())">Toggle</button>
@if (show()) { <p>Now you see me!</p> } @else { <p>Now I'm hidden.</p> }
`
})
export class App {
show = signal(true);
}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
- @if (show()):
showsignalini o‘qiydi; qiymat true bo‘lganda birinchi blokni, aks holda@elseblokini render qiladi. - O‘zgartirish: Tugma signal qiymatini o‘zgartirish uchun
show.set(!show())ni chaqiradi. - Shablonlardagi signallar: signallarni chaqirish orqali o‘qing (masalan,
show()).
Eslatmalar:
- Ifodalarni yengil saqlang: shablonlarda metodlarni chaqirishdan saqlaning; signallarni handler/servislarda yangilang.
- Legacy:
*ngIfbilanthen/elseqo‘llab-quvvatlanadi. - Aniq bo‘ling: Murakkab truthy/falsy tekshiruvlar o‘rniga aniq shartlardan (masalan,
isVisible) foydalaning.
@switch
@switchyordamida bitta qiymat bo‘yicha tanlang va mos keladigan case’ni render qiling.@defaultbilan har doim kutilmagan qiymatlar uchun aniq standartni taqdim eting.
@switch (status) {
@case ('loading') { <p>Loading...</p> }
@case ('success') { <p>Success!</p> }
@case ('error') { <p style="color:crimson">Error!</p> }
@default { <p>Unknown status</p> }
}
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component, signal } from '@angular/core';
@Component({
selector: 'app-root',
standalone: true,
template: `
<h3>Conditional Rendering with @switch</h3>
<label>
Status:
<select (change)="status.set($any($event.target).value)">
<option value="loading">loading</option>
<option value="success">success</option>
<option value="error">error</option>
</select>
</label>
@switch (status()) {
@case ('loading') { <p>Loading...</p> }
@case ('success') { <p>Success!</p> }
@case ('error') { <p style="color:crimson">Error!</p> }
@default { <p>Unknown status</p> }
}
`
})
export class App {
status = signal<'loading' | 'success' | 'error' | string>('loading');
}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
- @switch (status()): joriy
statussignali qiymati asosida render qilish uchun bitta case’ni tanlaydi. @case/@default: mos keladigan@case’ni render qiladi; hech bir case mos kelmasa,@default’ga o‘tadi.- O‘zgartirish ishlov beruvchisi:
selectstatusnistatus.set($any($event.target).value)orqali o‘rnatadi.
Eslatmalar:
- Default muhim: kutilmagan qiymatlar uchun har doim
@defaultcase’ini taqdim eting. - Barqaror qiymatlar: moslik oldindan aniq bo‘lishi uchun switch’ni obyektlar bo‘yicha emas, oddiy primitivlar (masalan, stringlar) bo‘yicha qo‘llang.
@if bilan ko‘p holat
- O‘qiladigan ko‘p holatli oqimlar uchun
@if/@else if/@elsedan foydalaning. - Holat o‘tishlarini komponentdan (masalan, taymerlar, bayroqlar) signallar orqali boshqaring.
@if (!loading() && !error()) {
<p>Content loaded successfully.</p>
} @else if (loading()) {
<p>Loading...</p>
} @else {
<p style="color:crimson">Something went wrong.</p>
}
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component, signal } from '@angular/core';
@Component({
selector: 'app-root',
standalone: true,
styles: [`
.toolbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
`],
template: `
<h3>Multi-state with @if</h3>
<div class="toolbar">
<button (click)="startLoading()">Start Loading</button>
<button (click)="showError()">Set Error</button>
<button (click)="reset()">Reset</button>
<span style="margin-left:8px;color:#666">loading={{ loading() }} error={{ error() }}</span>
</div>
@if (!loading() && !error()) {
<p>Content loaded successfully.</p>
} @else if (loading()) {
<p>Loading...</p>
} @else {
<p style="color:crimson">Something went wrong.</p>
}
`
})
export class App {
loading = signal(false);
error = signal(false);
private _timer: any;
startLoading() {
this.loading.set(true);
this.error.set(false);
clearTimeout(this._timer);
this._timer = setTimeout(() => {
this.loading.set(false);
}, 800);
}
showError() {
this.error.set(true);
this.loading.set(false);
}
reset() {
this.loading.set(false);
this.error.set(false);
}
}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
- Ko‘p tarmoqli @if:
loading()vaerror()signallari asosida muvaffaqiyat, yuklash yoki xato bo‘limlarini ko‘rsatadi. - startLoading():
loadingni true qiymatiga o‘rnatadi, xatoni tozalaydi, so‘ngra 800ms dan keyin loading’ni o‘chiradi (asinxron ishni simulyatsiya qiladi). - showError() / reset():
showError()errorni o‘rnatadi valoadingni tozalaydi;reset()ikkalasini ham tozalaydi.
Eslatmalar:
- O‘qilishi mumkin bo‘lgan oqimlar: Ko‘p holatli UI’lar uchun
@else ifzanjirni afzal ko‘ring; nomli shablonlardan faqat bloklarga dinamik ravishda murojaat qilish kerak bo‘lganda foydalaning. - Miltillashdan saqlaning: holatni komponentdan boshqaring; o‘tishlar paytida UI miltillashining oldini olish uchun taymerlar va asinxron ishlarni tozalang.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
