Angular hayotiy sikl hooklari
Lifecycle (hayotiy sikl) hook’lari — Angular muhim daqiqalarda (yaratish, input o‘zgarishlari, view’ning ishga tushishi, yo‘q qilish) chaqiradigan metodlar; ular yordamida sozlash, o‘zgarishlarga javob berish, shablon havolalariga (template refs) murojaat qilish va tozalash ishlarini bajarishingiz mumkin.
Hayotiy sikl asoslari
- Nima: lifecycle (hayotiy sikl) hook’lari — Angular muhim paytlarda (init, input o‘zgarishlari, view init, destroy) chaqiradigan metodlar.
- O‘rnatish: Kirishlar o‘rnatilgandan keyin
ngOnInitdan foydalaning. - React:
ngOnChanges-dagi kirish o‘zgarishlarini boshqaring. - DOM tayyor:
@ViewChildreferatlariga kirish uchunngAfterViewInit-dan foydalaning. - Tozalash:
ngOnDestroy-da taymerlarni/obunalarni/tinglovchilarni chiqaring.
import { OnInit, OnDestroy, AfterViewInit, ViewChild, ElementRef } from '@angular/core';
export class Demo implements OnInit, AfterViewInit, OnDestroy {
@ViewChild('box') box!: ElementRef<HTMLInputElement>;
intervalId: any;
ngOnInit() { /* setup after inputs */ }
ngAfterViewInit() { this.box.nativeElement.focus(); }
ngOnDestroy() { clearInterval(this.intervalId); }
}
// Template: <input #box>
Misol tushuntirildi
ngOnInit: allaqachon bog‘langan kirishlarni talab qiladigan sozlashni ishga tushiring.@ViewChild+ngAfterViewInit: Ko‘rinish ishga tushirilgandan keyingina kirishga kirish va fokuslash.ngOnDestroy: Oqishning oldini olish uchun taymerlarni/tinglovchilarni tozalang.
Eslatmalar:
- Aloqador: Ko‘rinishlar yaratish uchun componentlar, belgilash va ko‘rsatkichlar uchun shablonlar va misollarda qo‘llaniladigan
*ngIfkabi tizimli ko‘rsatish uchun ko‘rsatmalarga qarang. - Konstruktorlarda DOMga kirishdan saqlaning.
Lifecycle (hayotiy sikl) hook’lari
- Hayotiy siklni almashtirish: Komponentni ko‘rsatish (masalan,
*ngIfbilan)ngOnInit-ni ishga tushiradi; uni yashirish uchunngOnDestroyishlaydi. - Ishni bajarish/bekor qilish: Init-da taymerlarni/obunalarni ishga tushirish, yo‘q qilishda o‘chirish/obunani bekor qilish.
export class Child implements OnInit, OnDestroy {
intervalId: any;
ngOnInit() { this.intervalId = setInterval(() => {/* ... */}, 1000); }
ngOnDestroy() { clearInterval(this.intervalId); }
// <child-cmp *ngIf="show"></child-cmp>
Misol tushuntirildi
ngOnInit: component yaratilganda taymerni ishga tushiradi.ngOnDestroy: component o‘chirilganda taymerni o‘chiradi.*ngIf: shartni almashtirish ichki (child) komponentni yaratadi/yo‘q qiladi va hook’larni chaqiradi.
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component, OnInit, OnDestroy } from '@angular/core';
import { CommonModule } from '@angular/common';
{{ ... }}
show = true;
toggle() { this.show = !this.show; }
}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
- Almashtirish: Bolani qo‘shish/o‘chirish uchun tugma
showni aylantiradi. - Harakatdagi hook’lar: bolani yaratish
ngOnInitdasturini ishga tushiradi; uni olib tashlashngOnDestroybilan ishlaydi. - Tozalash: Intervalni tozalash vayron qilingandan keyin fon ishini oldini oladi.
Eslatmalar:
- Tozalash kerak:
ngOnDestroyichida intervallarni/taym-autlarni tozalang va obunani bekor qiling; Iloji bo‘lsaasyncpipeline foydalaning. - Hook’lardagi og‘ir ish: tez-tez chaqiriladigan hook’larda (masalan,
ngOnChanges) ko‘p resurs talab qiladigan ishlardan qoching; debounce/throttle qo‘llang yoki ishni xizmatlarga (services) o‘tkazing. - Qo‘lda tinglovchilar: Yo‘q qilishda qo‘lda qo‘shilgan voqea tinglovchilarini olib tashlang yoki
Renderer2tomonidan qaytarilgan tozalash funksiyasini saqlang.
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component, OnInit, OnDestroy } from '@angular/core';
import { CommonModule } from '@angular/common';
{{ ... }}
export class App {
text = '';
}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
- Ota-ona → Bola: kiritish oynasi ota-onada
textyangilanadi; bola uni[text]orqali oladi. - Yozuvni o‘zgartirish: Bola ko‘rsatish uchun
SimpleChanges-dan oxirgi oldingi va kurs qiymatlarini saqlaydi. - Edge case:
undefined → valueyokivalue → ''kabi o‘tishlarni boshqaradi.
Eslatmalar:
- O‘zgarmas kirishlar:
OnChangesishlashini ta’minlash uchun mutatsiya o‘rniga massivlarni/obyektlarni almashtiring. - OnPush bilan: Kirish ma’lumotnomasi o‘zgarishlarni ishga tushirish tekshiruvlari; in-joy mutatsiya ota-onalardan yangi murojaatlarni chiqarmasligi mumkin.
- O‘zgarishlarni tekshiring: chekka holatlarni (masalan, aniqlanmagan → qiymat) qayta ishlash uchun
SimpleChanges-dan foydalaning.
@ViewChild('box') box!: ElementRef<HTMLInputElement>;
ngAfterViewInit() { this.box.nativeElement.focus(); }
Misol tushuntirildi
@Input(): Bola ota-onalar bog‘lashi mumkin bo‘lgantextkiritishni e’lon qiladi.ngOnChanges(changes): Har bir o‘zgartirilgan kiritish uchunpreviousValuevacurrentValuebilanSimpleChangesoladi.- O‘zgarmas yangilanishlar: O‘zgarishlarni aniqlashni ishga tushirish uchun mos yozuvlarni mutatsiyaga ko‘ra almashtirishni afzal ko‘ring.
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
import { CommonModule } from '@angular/common';
{{ ... }}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
- Ko‘p murojaatlar:
boxkiritish va@ViewChildorqalipanelkonteynerini o‘qiydi. - DOM ishini kechiktirish:
ngAfterViewInit-dasetTimeout-dan o‘lchashdan oldin ko‘rinishga ruxsat berish uchun foydalanadi. - o‘lchov (): Chegaraviy maydonni o‘qiydi va o‘lcham stringini formatlaydi.
Eslatmalar:
- Konstruktorda DOM dan foydalanmang: Ko‘rinish tayyor emas;
ngAfterViewInitdan keyin DOM operatsiyalarini bajaring. - Juda erta o‘qish:
@ViewChild-ngAfterViewInitdan oldinundefined- mavjudligini tekshiring yoki ishni kechiktiring.
AfterViewInit va tozalash
Ko‘rinish ishga tushirilgandan so‘ng shablon referatlariga kirish va component yo‘q qilinganda resurslarni tozalash.
// Example teardown pattern
sub?.unsubscribe?.();
clearInterval(intervalId);
removeListener?.();
Misol tushuntirildi
- Olib tashlash:
ngOnDestroy-da obunani bekor qiling, intervallarni tozalang va tinglovchilarni olib tashlang. - Xavfsizlik: ixtiyoriy zanjirli (
?.) tutqichlarning yetishmasligidan himoya qiladi.
Eslatmalar:
- Diqqatni jamlang va xavfsiz o‘lchang:
ngAfterViewInitdan keyin DOM o‘qish/yozishni ishga tushiring (yoki ko‘rinish o‘rnatilishi uchunsetTimeoutichida). - Kuzatuvchilar va tinglovchilar:
ResizeObserver/MutationObserver-ni uzing vangOnDestroy-da qo‘lda hodisa tinglovchilarini olib tashlang. - Obunalar:
asyncpipeline foydalaning; agar siz qo‘lda obuna bo‘lsangiz, yo‘q qilishda obunani bekor qiling (masalan,takeUntilDestroyed).
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
