Quelle est la différence entre Subject et BehaviorSubject?

Je ne suis pas clair sur la différence entre un object et un object comportement. Est-ce juste qu’un BehaviorSubject a la fonction getValue?

Un BehaviorSubject contient une valeur. Quand il est souscrit, il émet la valeur immédiatement. Un sujet ne contient pas de valeur.

Exemple de sujet (avec l’API RxJS 5):

const subject = new Rx.Subject(); subject.next(1); subject.subscribe(x => console.log(x)); 

La sortie de la console sera vide

Exemple de comportement:

 const subject = new Rx.BehaviorSubject(); subject.next(1); subject.subscribe(x => console.log(x)); 

Sortie de la console: 1

En outre:

  • BehaviorSubject peut être créé avec la valeur initiale: new Rx.BehaviorSubject (1)
  • Considérez ReplaySubject si vous souhaitez que le sujet contienne plus d’une valeur

ComportementSujet

BehaviourSubject renvoie la valeur initiale ou la valeur actuelle sur l’abonnement

 var subject = new Rx.BehaviorSubject(0); // 0 is the initial value subject.subscribe({ next: (v) => console.log('observerA: ' + v) // output initial value, then new values on `next` sortingggers }); subject.next(1); // output new value 1 for 'observer A' subject.next(2); // output new value 2 for 'observer A', current value 2 for 'Observer B' on subscription subject.subscribe({ next: (v) => console.log('observerB: ' + v) // output current value 2, then new values on `next` sortingggers }); subject.next(3); 

Avec sortie:

 observerA: 0 observerA: 1 observerA: 2 observerB: 2 observerA: 3 observerB: 3 

Assujettir

L’object ne renvoie pas la valeur actuelle sur l’abonnement. Il ne se déclenche que sur l’ .next(value) et retourne / .next(value) la value

 var subject = new Rx.Subject(); subject.next(1); //Subjects will not output this value subject.subscribe({ next: (v) => console.log('observerA: ' + v) }); subject.subscribe({ next: (v) => console.log('observerB: ' + v) }); subject.next(2); subject.next(3); 

Avec la sortie suivante sur la console:

 observerA: 2 observerB: 2 observerA: 3 observerB: 3