Thuta Learning
AdvancedWeb Developmentintermediate

Subject & BehaviorSubject

Relax. We'll talk through this in plain words — no textbook voice.

Subject is both an Observable and an Observer. BehaviorSubject stores its current value and immediately hands it to new subscribers.

typescript
import { Subject, BehaviorSubject } from 'rxjs';

// Subject - simple event bus
const subject = new Subject<string>();

subject.subscribe(val => console.log('Subscriber 1:', val));
subject.next('Hello');  // Subscriber 1: Hello

subject.subscribe(val => console.log('Subscriber 2:', val));
subject.next('World');  // Both subscribers receive 'World'

// BehaviorSubject - has initial value, remembers last value
const behaviorSubject = new BehaviorSubject<number>(0);

behaviorSubject.subscribe(val => console.log('Sub A:', val));  // Sub A: 0
behaviorSubject.next(1);  // Sub A: 1

// New subscriber gets last value immediately
behaviorSubject.subscribe(val => console.log('Sub B:', val));  // Sub B: 1

// Real example: Shared state service
@Injectable({ providedIn: 'root' })
export class UserStateService {
  private userSubject = new BehaviorSubject<User | null>(null);
  user$ = this.userSubject.asObservable();
  
  setUser(user: User) {
    this.userSubject.next(user);
  }
}
You should see
(Subject/BehaviorSubject can be used to share data between components)
Subject & BehaviorSubject | Thuta Learning