Моя подписка на сервис работает только в компоненте приложения на angular9 - PullRequest
0 голосов
/ 26 марта 2020

Я angular 9 observables не работает на других компонентах, кроме app.component.

Вот мой сервис:

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';

@Injectable()
export class LoggedinService {

  constructor() { }

  private loggedinAnnouncedSource = new Subject<boolean>();
  // Observable string streams
  loggedinAnnounced$ = this.loggedinAnnouncedSource.asObservable();
  // Service message commands
  announceLoggedin(loggedin: boolean) {
    this.loggedinAnnouncedSource.next(loggedin);
  }

} 

Здесь работает хит в app.component на init:

this.li_sub = this.loggedinService.loggedinAnnounced$.subscribe(
  isLoggedIn => {
    this.isLoggedIn = isLoggedIn;
    console.log('app isLoggedIn:',this.isLoggedIn);
}); //end this.li_sub

Это срабатывает, и я получаю в консоли следующее:

 app isLoggedIn: true

У меня есть другой компонент, который загружается в onInit, и он вообще не запускается:

this.li_sub = this.loggedinService.loggedinОбъявленный $ .subscribe (

  isLoggedIn => {
    console.log('dashboard isLoggedIn:',this.isLoggedIn);
    this.isLoggedIn = isLoggedIn;

}); //end this.li_sub

В результате я не могу получить this.isLoggedIn

Почему это не будет работать? Нет ошибок вообще

ОБНОВЛЕНИЕ:

Я использовал приведенный ниже комментарий на основании комментария. Почему это сработало? Я иду из angular 7, где работает.

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { BehaviorSubject } from 'rxjs';


@Injectable()
export class LoggedinServiceBehavior {

  constructor() { }

  private loggedinAnnouncedSourceB = new BehaviorSubject<boolean>(null);
  // Observable string streams
  loggedinAnnouncedB$ = this.loggedinAnnouncedSourceB.asObservable();
  // Service message commands
  announceLoggedin(loggedin: boolean) {
    this.loggedinAnnouncedSourceB.next(loggedin);
  }

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...