Retour au cours

Interaction entre composants : Output et EventEmitter

Le Développeur Angular Complet : de Zéro à Héros

66. Interaction entre composants : Output et EventEmitter

Pour communiquer des données vers le haut de l'arbre (de l'Enfant vers le Parent), Angular utilise le décorateur @Output() associé à la classe EventEmitter.

1. Définir l'Output dans le composant Enfant

Une propriété @Output() doit être une instance de EventEmitter<T>, où T est le type de données à envoyer. L' EventEmitter fournit la méthode emit().

typescript // item-selector.component.ts (L'Enfant) import { Component, Output, EventEmitter } from '@angular/core';

@Component({ /* ... */ }) export class ItemSelectorComponent {

// Définir le nom de l'événement et le type de payload (string ici) @Output() itemSelected = new EventEmitter();

selectItem(itemName: string) { // 1. Déclencher l'événement this.itemSelected.emit(itemName); } }

2. Écouter l'événement dans le composant Parent

Le composant parent écoute à l'aide de la syntaxe de liaison d'événement (( )) et associe la valeur émise (fournie par Angular via $event) à une méthode du parent.

typescript // parent.component.ts export class ParentComponent { lastSelectedItem: string = 'Aucun';

// Méthode pour gérer le payload de l'événement handleSelection(name: string) { this.lastSelectedItem = name; console.log(L'enfant a sélectionné : ${name}); } }

html

<app-item-selector (itemSelected)="handleSelection($event)">

Dernière sélection : {{ lastSelectedItem }}

Bonne pratique : Définissez toujours clairement le nom de l'événement et n'utilisez EventEmitter que pour la communication entre composants, pas pour les services (où les Subjects RxJS sont préférables).