Responding to DOM Events
Event binding lets your component respond to user interactions like clicks, key presses, and form submissions.
Basic Event Binding
@Component({
selector: 'app-counter',
template: `
<button (click)="increment()">+</button>
<span>{{ count }}</span>
<button (click)="decrement()">-</button>
`,
})
export class CounterComponent {
count = 0;
increment(): void {
this.count++;
}
decrement(): void {
this.count--;
}
}
Accessing the Event Object with $event
@Component({
selector: 'app-input-demo',
template: `
<input (input)="onInput($event)">
<p>Last value: {{ lastValue }}</p>
<button (click)="onClick($event)">Click me</button>
`,
})
export class InputDemoComponent {
lastValue = '';
onInput(event: Event): void {
this.lastValue = (event.target as HTMLInputElement).value;
}
onClick(event: MouseEvent): void {
console.log('Clicked at:', event.clientX, event.clientY);
}
}
Common DOM Events
| Event | When It Fires |
|---|---|
click |
User clicks an element |
dblclick |
User double-clicks |
input |
Value of an input changes |
change |
Value commits (blur or enter) |
keydown |
Key is pressed down |
keyup |
Key is released |
submit |
Form is submitted |
focus |
Element gains focus |
blur |
Element loses focus |
mouseenter |
Mouse enters element |
mouseleave |
Mouse leaves element |
scroll |
Element is scrolled |
resize |
Window is resized |
Event Propagation and stopPropagation
@Component({
selector: 'app-nested',
template: `
<div (click)="onParentClick()">
Parent
<button (click)="onChildClick($event)">Child</button>
</div>
`,
})
export class NestedComponent {
onParentClick(): void {
console.log('Parent clicked');
}
onChildClick(event: MouseEvent): void {
event.stopPropagation();
console.log('Child clicked (propagation stopped)');
}
}
Form Events and Keyboard Shortcuts
Event binding is essential for handling form interactions and keyboard shortcuts.
Form Submission
@Component({
selector: 'app-login-form',
template: `
<form (ngSubmit)="onSubmit()">
<input name="email" [(ngModel)]="email" placeholder="Email">
<input name="password" type="password" [(ngModel)]="password" placeholder="Password">
<button type="submit">Log in</button>
</form>
`,
})
export class LoginFormComponent {
email = '';
password = '';
onSubmit(): void {
console.log('Login:', this.email);
}
}
Keyboard Events
@Component({
selector: 'app-search',
template: `
<input
(input)="onSearch($event)"
(keydown.enter)="onEnter()"
(keydown.escape)="onClear()"
placeholder="Search...">
`,
})
export class SearchComponent {
onSearch(event: Event): void {
const query = (event.target as HTMLInputElement).value;
console.log('Searching:', query);
}
onEnter(): void {
console.log('Enter pressed');
}
onClear(): void {
console.log('Escape pressed');
}
}
Global Keyboard Shortcuts with HostListener
@Component({
selector: 'app-editor',
template: `<textarea></textarea>`,
})
export class EditorComponent {
@HostListener('document:keydown.control.s', ['$event'])
onSave(event: KeyboardEvent): void {
event.preventDefault();
console.log('Save triggered');
}
@HostListener('document:keydown.control.z', ['$event'])
onUndo(event: KeyboardEvent): void {
event.preventDefault();
console.log('Undo triggered');
}
}
Quiz
1. How do you access the native DOM event in an event handler?
2. How do you stop event propagation in Angular?
3. Which event fires when a form is submitted?
Flashcards
Question
How do you bind to a click event?
Click to reveal answer
Answer
(click)="handler()" — parentheses listen for DOM events and run a template statement.
Question
How do you access the native event object?
Click to reveal answer
Answer
$event — pass it to the handler: (click)="onClick($event)"
Question
How do you stop event propagation?
Click to reveal answer
Answer
event.stopPropagation() — prevents bubbling to parent elements.
Revision Notes
Key Takeaways
- 1. (event) binding responds to DOM events
- 2. $event provides access to the native event object
- 3. event.stopPropagation() prevents bubbling
- 4. (ngSubmit) handles form submissions
Interview Tips
- • Explain the difference between stopPropagation and preventDefault
- • Be ready to describe common form events
- • Mention HostListener for global keyboard shortcuts
Cheat Sheet
Event Binding Cheat Sheet
Basic syntax:
<button (click)="handler()">Click</button>
<input (input)="onInput($event)">
<form (ngSubmit)="onSubmit()">
Common events:
- (click), (dblclick)
- (input), (change)
- (keydown), (keyup)
- (focus), (blur)
- (ngSubmit)
Stop propagation:
onClick(event: MouseEvent): void {
event.stopPropagation();
}