Angular4 - Problem z BehaviorSubject

0

Prosił bym o pomoc. Od wczoraj nie wime co robię źel.

Mam utworzony serwis Auth. W nim BehaViorSubject. Dla testu robię to ze zwykłym stringiem.

private userData = new BehaviorSubject<string>('');

curenUserData$ = this.userData.asObservable();

changeUserData(userData: string) {
        this.userData.next(userData);
}

W metodzie post HttpClient ta metoda dorzuca po prostu słowo "test"

W komponencie (jest to komponent login -> dziecko HomeCompnent - jeśli ma to znaczenie) chcę uzyskać tą wartość:

Konstruktor.... wiadomo wstrzykniety AuthService

 userData: string;

  ngOnInit() {

     this._auth.setUserData().subscribe( x => this.Name = x);

     console.log(this.userData); // I NIE WIEM CZMEU MAM PUSTY wynik !???? 

    }

Nie rozumiem, czemu w HTML {{ userData }} działa tylko za pierwszym razem. Odświeżenie daje pusty wynik - czyli wartość początkową - czy tu nie powinno siedzieć to co ostatnio dodałem poprzez next() ????

0

Ok doszedłem do tego - dla potomnych.

BehaviorSubject zwraca ostatnią wartość (jakoś błednie myślałem, że to gdzieś siedzi w pamięci i refresh page tego nie zmieina). Odświeżenie strony rozumiem tworzy nową instancję serwisu - więc zwracana z niego jest wartość domyślna (wymagana przy tworzeniu BSubject)

Tak więc wykorzystałem localStorage aby nie odpytywać DB za każdymm razem. W serwisie przy danej metodzie HttpClient get czy tam post w localstorage zapisuję sobie czy user jest zalogowany czy nie (jak przy JWT). W komponencie rodzica (lub tym w którym potrzebujemy) dorzucam OnInit aby przy ew refresh page ponownie wypełniło BehaviorSubject tym czymm trzeba

ngOnInit(): void {
    if (localStorage.getItem('LoggedIn')) {
      const userData: CartMember = JSON.parse(localStorage.getItem('CartMember'));
      this._auth.changeUserData(userData);   //metoda w Servisie  z next() dodająca wartość do BehaviorSubject
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1