Tengo un archivo de servicio auth.service.ts
export class AuthService { private _isLoggedIn = new BehaviorSubject<boolean>(false); isLoggedIn = this._isLoggedIn.asObservable() constructor(private http: HttpClient) {} //if admin //setter method updateAuthenticated(newValue: boolean){ this._isLoggedIn.next(newValue); } //for guarding routes //getter method isAuthenticated(){ return this.isLoggedIn.subscribe(isLoggedIn =>{ console.log(isLoggedIn); }); }Al llamar al método updateAuthenticated() dentro de login.component.ts
this.authService.updateAuthenticated(true); this.route.navigate(['/admin']);Los cambios realizados en la variable dentro del método updateAuthenticated() no se reflejan si verifico el valor de la variable en el método isAuthenticated() que sigue siendo "falso" como se inicializó. Sin embargo, Verificar el valor dentro del método setter devuelve el valor correcto. Intenté usar BehaviourSubject y no puedo hacerlo bien. ¿Hay alguna manera de obtener el nuevo valor dentro del método isAuthenticated () (método de obtención) o qué estoy haciendo mal con BehaviourSubject?
La función isAuthenticated() dentro del servicio no emitirá el valor, porque le devolverá toda la instancia observable. Debe suscribirse al isLoggedIn observable directamente dentro del componente donde necesita escuchar el evento BehaviorSubject .
Entonces, en lugar de poner isAuthenticated() es el archivo service.ts, vaya al componente que necesita el valor emitido y haga lo siguiente:
export class SomeComponent implements OnInit() { latestValue: boolean; constructor(private authService: AuthService) {} ngOnInit() { this.authService.isLoggedIn.subscribe(isLoggedIn =>{ this.latestValue = isLoggedIn; // now use this.latestValue within the component }); } }