Angular hodisalari
Voqealar shabloningizga foydalanuvchi harakatlariga munosabat bildirish imkonini beradi.
Voqeani bog‘lash asoslari
- component usulini ishga tushirish uchun
(event)bilan bog‘lang;$event- mahalliy voqea. (click),(input)kabi keng tarqalgan DOM hodisalaridan va(keyup.enter)kabi tugma filtrlaridan foydalaning.- Tez kiritish vaqtida ishni cheklash uchun ishlov beruvchilarni bekor qiling.
- Bubbling: ichki elementlardagi hodisalar yuqoriga ko‘tariladi; kerak bo‘lganda
$event.stopPropagation()ni chaqiring.
<button (click)="onClick()">Click</button>
<input (input)="onInput($event)" (keyup.enter)="submit()">
<div (click)="onParentClick()">
<button (click)="onChildClick($event)">Child</button>
</div>
Eslatma: Belgilash va interpolyatsiya qilish uchun shablonlarga qarang, xususiyat/ikki tomonlama bog‘lash uchun ma’lumotlarni bog‘lash va kontentni ko‘rsatish/yashirish uchun shartli ko‘rsatish.
Asosiy voqealar
- Component holatini yangilash uchun
(click)dan foydalaning. $event.targetdan kiritilgan qiymatlarni o‘qing (kerak bo‘lganda translatsiya yoki$anydan foydalaning).- Track the last key pressed via
(keyup).
<button (click)="increment()">Click me</button>
<input (input)="onInput($event)" (keyup)="lastKey = $any($event).key">
Misol
Umumiy hodisalarni boshqaring va component holatini foydalanuvchi kiritishi bilan sinxronlashtiring:
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
standalone: true,
template: `
<h3>Events</h3>
<p>Count: {{ count }}</p>
<button (click)="increment()">Click me</button>
<div style="margin-top:12px">
<input placeholder="Type..." (input)="onInput($event)" (keyup)="lastKey = $any($event).key">
<p>Value: {{ value }}</p>
<p>Last key: {{ lastKey }}</p>
</div>
`
})
export class App {
count = 0;
value = '';
lastKey = '';
increment() { this.count++; }
onInput(e: Event) { this.value = (e.target as HTMLInputElement).value; }
}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
(click)="increment()":countni oshirish uchun component usulini chaqiradi.(input)="onInput($event)": Kirishning joriy matnini$event.target.dan o‘qiydi va uni qiymatda saqlaydi.value(keyup)=": Oxirgi bosilgan tugmani oxirgi kalitda saqlaydi.lastKey= $any($event).key"- Displey:
{{ count }},{{ value }}va{{ lastKey }}component maydonlarini ko‘rsatadi.
Eslatmalar:
- Ishlovchilarni kichikroq tuting: Voqealar ishlov beruvchilarida minimal ishni bajaring; og‘ir ishlarni xizmatlarga topshirish.
- Hodisani kiriting:
$eventni tor yoki kiritmalarni o‘qishda$any($event.target)dan foydalaning. - Tarqatish/standart: kerak bo‘lganda
$event.stopPropagation()/$event.preventDefault()dan foydalaning.
Hodisalarni filtrlash (keyup.enter)
- Ishlovchilarni faqat ma’lum kalitlarda ishga tushirish uchun kalit taxalluslaridan foydalaning (masalan, Enter).
- Filtrlangan hodisalar holatini yangilash orqali UI reaktivligini saqlang.
<input (keyup.enter)="add()" (keyup)="lastKey = $any($event).key">
Misol
Filter keyboard events with key aliases like keyup.enter:
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
@Component({
selector: 'app-root',
standalone: true,
imports: [CommonModule],
styles: [`
.toolbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
ul { margin-top: 10px; }
li { line-height: 1.8; }
input[type="text"] { padding: 6px 8px; }
`],
template: `
<h3>Event Filtering (keyup.enter)</h3>
<div class="toolbar">
<input type="text" placeholder="Add item and press Enter"
[value]="draft"
(input)="draft = $any($event.target).value"
(keyup)="lastKey = $any($event).key"
(keyup.enter)="add()">
<button (click)="add()">Add</button>
<button (click)="clear()" [disabled]="items.length === 0">Clear</button>
<span style="margin-left:8px;color:#666">Last key: {{ lastKey }}</span>
</div>
<ul>
<li *ngFor="let it of items; let i = index">{{ i + 1 }}. {{ it }}</li>
</ul>
`
})
export class App {
draft = '';
lastKey = '';
items = ['Buy milk', 'Learn Angular'];
add() {
const v = (this.draft || '').trim();
if (!v) return;
this.items = [...this.items, v];
this.draft = '';
}
clear() { this.items = []; }
}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
(keyup.enter)="add()": Faqat Enter tugmasi bosilganda ishlaydi va joriy qoralama qo‘shiladi.[value]="draft"/(input): Kirish elementi vadraftmaydonini sinxronlashtiradi.- Ro‘yxat: Yangi elementlar o‘zgarmas qo‘shiladi va
*ngForbilan ko‘rsatiladi;lastKeyoxirgi bosilgan tugmani ko‘rsatadi. - Tugmalar: "Qo‘shish" va "O‘chirish" ro‘yxat holatini yangilash uchun komponent metodlarini chaqiradi.
Eslatmalar:
- Kalit taxalluslaridan foydalaning: Kalit kodlarini qo‘lda tekshirish o‘rniga
(keyup.enter)dan foydalaning. - O‘zgarmas yangilanishlar: O‘zgarishlarni aniqlashni bashorat qilish uchun yangi massiv havolalari (masalan, tarqalish) bilan elementlarni qo‘shing/o‘chiring.
O‘chirilgan kirish
- Ortiqcha ishlamaslik uchun yangilanishlarni yozish to‘xtatilguncha kechiktiring.
- Kiritilgan o‘zgarishlarni bekor qilish uchun
setTimeoutyoki RxJS dan foydalaning.
// Pseudo
handle: any;
onInput(e) {
clearTimeout(handle);
handle = setTimeout(() => doWork(e), 400);
}
Misol
Tez yozish paytida ishni kamaytirish uchun foydalanuvchi kiritishini bekor qiling:
Misol
import { bootstrapApplication } from '@angular/platform-browser';
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
standalone: true,
template: `
<h3>Debounced Input</h3>
<input type="text" placeholder="Type here" (input)="onInput($event)">
<p>Immediate: {{ immediate }}</p>
<p>Debounced (400ms): {{ debounced }}</p>
`
})
export class App {
immediate = '';
debounced = '';
private handle: any;
onInput(e: Event) {
const v = (e.target as HTMLInputElement)?.value ?? '';
this.immediate = v;
clearTimeout(this.handle);
this.handle = setTimeout(() => this.debounced = v, 400);
}
}
bootstrapApplication(App);
<app-root></app-root>
Misol tushuntirildi
- Darhol va bekor qilingan: har bir kirishda
immediateyangilanishlar;debounced400ms dan keyin yangilanadi. onInput(e):e.target.valueni o‘qiydi,immediateni o‘rnatadi, kutilayotgan taymerni o‘chirib tashlaydi vadebouncedni o‘rnatish uchun yangi vaqt tugashini rejalashtiradi.- Taymer tutqichi:
handlekutish tugashi identifikatorini saqlaydi, shuning uchun uni keyingi bosishda o‘chirish mumkin.
Eslatmalar:
- Tozalash taymerlari: eskirgan yangilanishlarni oldini olish uchun har bir kirishda kutilayotgan taymerlarni o‘chiring.
- To‘g‘ri kechikish: UX ga mos keladigan bekor qilishni tanlang (masalan, 300-500ms).
- Oqimlar uchun rivojlangan holatlarda RxJS ni ko‘rib chiqing.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
