Angular - typ BehaviorSubject

Stronę tą wyświetlono już: 54 razy

Na stronie Programowanie → Angular - podstawy → Angular - typ Observable opisywałem interesujące zagadnienia związane z typem Observable. Nadeszła jednak doniosła chwila, aby zająć się typem BehaviorSubject, który rozszerza funkcjonalność typu Observable o pewne nowe zachowania dające nowe możliwości. Do różnic pomiędzy tymi dwoma typami obiektów należy wymienić:

  • w przypadku Observable dane można otrzymać jedynie poprzez subskrybcję, w przypadku BehaviorSubject zapamiętywany jest ostatni wprowadzony stan, do którego można się odwołać za pomocą gettera value lub otrzymać tę wartość poprzez subskrypcję;
  • BehaviorSubject wymaga zainicjowania wartością początkową

Tak więc, niezależnie kiedy i o jakiej porze dnia czy nocy zasubskrybujesz się do BahaviorSubject-a zawsze ale to zawsze będziesz otrzymywać ostatnią wartość doń przypisaną. Oto prosty przykład, który mówi więcej niż milion słów:

Listing 1
  1. let behaviorSubject: BehaviorSubject<string> = new BehaviorSubject<string>('Some start value');
  2. let firstSubscibent = behaviorSubject.subscribe(
  3. value => console.log('First subscribe value', value)
  4. );
  5. console.log('Start value of BehaviorSubject', behaviorSubject.value);
  6. behaviorSubject.next('Next value');
  7. behaviorSubject.next('Another one');
  8. let nextSubscibent = behaviorSubject.subscribe(
  9. value => console.log('Second subscribe value:', value)
  10. );
  11. console.log('End value of BehaviorSubject', behaviorSubject.value);

A oto i co wypluwa konsola przeglądarki:

First subscribe value Some start value
Start value of BehaviorSubject Some start value
First subscribe value Next value
First subscribe value Another one
Second subscribe value: Another one
End value of BehaviorSubject Another one

Ważne aby pamiętać o odsubskrybowaniu się w destruktorze. Bez tego będzie dochodziło do wycieków pamięci.

Komentarze