Avatar ·

Quelle est la différence entre Subject et BehaviorSubject dans RxJS ? Exemples en TypeScript

Bonjour à tous ! J'ai commencé à étudier Angular et RxJS, et je suis confus entre Subject et BehaviorSubject. Les deux semblent être utilisés pour créer un Observable avec la possibilité d'envoyer des valeurs, mais je ne comprends pas quelle est la différence clé.

Voici un exemple que j'ai écrit. Quand j'utilise Subject, les abonnés qui s'abonnent après l'envoi d'une valeur ne reçoivent pas cette valeur :

import { Subject } from 'rxjs';

const subject = new Subject<number>();

subject.next(1); // Envoie la valeur avant l'abonnement

subject.subscribe({
  next: (v) => console.log('Subject abonné A:', v)
});

subject.next(2); // Envoie après l'abonnement
// Résultat : Subject abonné A: 2
// La valeur 1 est perdue

Et quand j'utilise BehaviorSubject, les abonnés qui s'abonnent plus tard reçoivent la dernière valeur :

import { BehaviorSubject } from 'rxjs';

const behaviorSubject = new BehaviorSubject<number>(0); // N