Retour au cours

Introduction aux Subjects (Multicasting)

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

58. Introduction aux Subjects (Multicasting)

Les Observables standards sont unicast (ou "froids") : chaque abonné obtient sa propre exécution indépendante de la logique de l'Observable (ex : chaque abonné HTTP déclenche une nouvelle requête).

Les Subjects sont un type spécial d'Observable dit multicast (ou "chaud") : ils permettent à plusieurs Observers de s'abonner à la même exécution. Un Subject est à la fois un Observer (il peut recevoir des valeurs via next()) et un Observable (on peut s'y abonner).

Subject basique (Subject<T>)

Un Subject basique est un flux qui ne conserve pas d'état. Il n'émet des valeurs qu'aux abonnés qui écoutent au moment où la valeur est émise.

Cas d'usage : Émetteurs d'événements dans les services pour la communication entre composants non liés (remplaçant l' EventEmitter d'Angular dans les services).

typescript import { Subject } from 'rxjs';

const statusUpdate$ = new Subject();

// L'abonné A commence à écouter statusUpdate$.subscribe(message => console.log('Sub A:', message));

// Le flux émet une valeur statusUpdate$.next('Système initialisé'); // Sortie : Sub A: Système initialisé

// L'abonné B commence à écouter plus tard statusUpdate$.subscribe(message => console.log('Sub B:', message));

statusUpdate$.next('Utilisateur connecté'); /* Sortie : Sub A: Utilisateur connecté Sub B: Utilisateur connecté */

statusUpdate$.complete(); // Termine le flux pour tous les abonnés

Crucial : Si l'abonné B s'était abonné après l'émission de 'Système initialisé', il aurait manqué ce message. La leçon suivante présente les Subjects qui stockent un état.