Skip to content
beginner Phase 4 · Bindings, Structural Directives, and Events

Event Binding and Template Statements

Respond to clicks, submits, and keyboard events in the template.

30m
0 problems
Topic Progress 0%

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?

Question 1 options

2. How do you stop event propagation in Angular?

Question 2 options

3. Which event fires when a form is submitted?

Question 3 options

Flashcards

Question

How do you bind to a click event?

Answer

(click)="handler()" — parentheses listen for DOM events and run a template statement.

Question

How do you access the native event object?

Answer

$event — pass it to the handler: (click)="onClick($event)"

Question

How do you stop event propagation?

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();
}

Continue Learning