What is the difference between behaviour subject and subject in angular?
In Angular, both BehaviorSubject
and Subject
are part of the RxJS library and are used to implement observer pattern. But, there are some differences between the two.
A BehaviorSubject
is a type of Subject
that has a notion of “the current value”. It stores the current value and emits it to new subscribers as soon as they subscribe. This means that if a new subscriber subscribes to a BehaviorSubject
, it will immediately receive the latest value.
On the other hand, a plain Subject
does not have the notion of “the current value”. It simply emits values to its subscribers as they are received.
In general, if you need to represent a value that changes over time and you want to ensure that subscribers receive the current value when they subscribe, use a BehaviorSubject
. If you just need to send data to multiple subscribers, use a plain Subject
.
Example:
const behaviorSubject = new BehaviorSubject(0);
behaviorSubject.subscribe(value => console.log('Subscriber 1:', value));
behaviorSubject.next(1);
behaviorSubject.next(2);
behaviorSubject.subscribe(value => console.log('Subscriber 2:', value));
behaviorSubject.next(3);
// Output:
// Subscriber 1: 0
// Subscriber 1: 1
// Subscriber 1: 2
// Subscriber 2: 2
// Subscriber 1: 3
// Subscriber 2: 3
const subject = new Subject();
subject.subscribe(value => console.log('Subscriber 1:', value));
subject.next(1);
subject.next(2);
subject.subscribe(value => console.log('Subscriber 2:', value));
subject.next(3);
// Output:
// Subscriber 1: 1
// Subscriber 1: 2
// Subscriber 2: 3