Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 4903 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:

let behaviorSubject: BehaviorSubject<string> = new BehaviorSubject<string>('Some start value'); let firstSubscibent = behaviorSubject.subscribe( value => console.log('First subscribe value', value) ); console.log('Start value of BehaviorSubject', behaviorSubject.value); behaviorSubject.next('Next value'); behaviorSubject.next('Another one'); let nextSubscibent = behaviorSubject.subscribe( value => console.log('Second subscribe value:', value) ); 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.

Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.