Angular 18+
Angular 18 va undan keyingi versiyalar — zoneless change detection, signal-based component RFC va migration strategiyasi. Angular'ning kelajak yo'nalishi shu yerda shakllanmoqda.
Zoneless — provideExperimentalZonelessChangeDetection()
Nima bu?
Zoneless — Zone.js'siz change detection. Angular 18 da provideExperimentalZonelessChangeDetection() experimental. Signals, async pipe va manual ChangeDetectorRef.markForCheck() o'rniga granular update. Bundle kichikroq (Zone.js ~13KB), performance yaxshi, lekin third-party library'lar Zone'ga bog'liq bo'lishi mumkin.
Kod misoli
import { bootstrapApplication } from '@angular/platform-browser';
import { provideExperimentalZonelessChangeDetection } from '@angular/core';
bootstrapApplication(AppComponent, {
providers: [
provideRouter(routes),
provideHttpClient(),
provideExperimentalZonelessChangeDetection(), // Zone.js o'chiriladi
],
});
// Zoneless'da ishlashi uchun — signal yoki async pipe
@Component({
template: `
<p>{{ count() }}</p>
<p>{{ data$ | async }}</p>
`,
})
export class ZonelessSafeComponent {
count = signal(0);
data$ = this.http.get<Data[]>('/api/data');
increment() {
this.count.update((v) => v + 1); // signal → avtomatik update
}
// setTimeout ichida oddiy property o'zgarishi update QILMAYDI
// this.value = 1 — Zone yo'q, CD trigger yo'q
}
Imtihonda
- Zone.js nima qiladi? Nima uchun olib tashlanmoqda?
- Zoneless'da setTimeout ichida property o'zgartirish ishlaydimi?
Yodlash uchun
Zoneless = Signal/async pipe kerak. Zone = avtomatik CD trigger.
Signal-based component (RFC)
Nima bu?
Angular 18+ Signal-based Components RFC — component state to'liq signal'larda: input(), model(), viewChild(), internal signal(). @Input, @Output, class field'lar asta-sekin deprecated yo'l. Change detection soddalashtiriladi, zoneless bilan tabiiy integratsiya. Hozircha RFC/preview bosqichida.
Kod misoli
// Zamonaviy signal-based component (17.1+ / 18 pattern)
@Component({
selector: 'app-user-list',
standalone: true,
imports: [UserCardComponent],
template: `
@for (user of filteredUsers(); track user.id) {
<app-user-card
[user]="user"
[(selected)]="selectedIds"
/>
}
`,
})
export class UserListComponent {
users = input.required<User[]>();
filter = input('');
selectedIds = model<number[]>([]);
filteredUsers = computed(() =>
this.users().filter((u) =>
u.name.toLowerCase().includes(this.filter().toLowerCase())
)
);
}
Imtihonda
- Signal-based component afzalliklari?
- BehaviorSubject store vs signal store?
Yodlash uchun
Signal component = input/model/computed. Zoneless kelajak. RFC — hali evolyutsiya.
Migration strategiyasi — ng update, schematics
Nima bu?
Angular migration — ng update @angular/core @angular/cli major versiyaga yangilash. Schematics avtomatik kod o'zgartirish: control flow, standalone, inject(), signal input. angular.json va breaking changes guide. Bosqichma-bosqich: bir major versiya, test, keyingisi.
Kod misoli
# Major versiya yangilash
ng update @angular/core@17 @angular/cli@17
# Control flow migration schematic
ng generate @angular/core:control-flow
# Standalone migration
ng generate @angular/core:standalone
# Inject migration (constructor → inject)
ng generate @angular/core:inject
# Typed forms migration
ng generate @angular/core:typed-forms
// angular.json — update qo'llanmasi
// 1. Node LTS versiyasini tekshirish
// 2. ng update
// 3. Breaking changes: https://angular.dev/update-guide
// 4. Test suite ishga tushirish
// 5. Deprecated API'larni almashtirish
Imtihonda
- ng update qanday ishlaydi?
- Schematic va qo'lda refactor farqi?
- 14 → 17 migration qanday bosqichlarda?
Yodlash uchun
ng update = CLI yangilash + schematics. Bir major = bir qadam. update-guide.angular.dev.
