es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué funciona acceder directamente desde el Servicio pero no con objetos referenciados en mi aplicación Angular?

Tengo una clase AuthService que tiene un BehaviorSubject, este es el inicio de mi servicio:

private currentUserSubject: BehaviorSubject = new BehaviorSubject(undefined as any);

get currentUserValue(): UserModel {
  return this.currentUserSubject.value;
}

set currentUserValue(user: UserModel) {
  this.currentUserSubject.next(user);
}

Y tengo una función para probarlo:

isLogged() {
  return this.currentUserSubject.asObservable();
}

En un componente sencillo que tengo, hago esto:

isLoggedIn$!: Observable;

constructor(
  public authService: AuthService,
  private _bottomSheet: MatBottomSheet,
  private modalService: NgbModal
) {}

ngOnInit(): void {
  this.isLoggedIn$ = this.authService.isLogged();
}

Y esta es mi interfaz de usuario de ese componente:

Este funciona bien cuando actualizo este Behavior:

{{ _user.name }}

Esto no funciona:

{{ _user.name }}

¿Por qué?

Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la cual el segundo fragmento de código no funciona es que con la línea this.isLoggedIn$ = this.authService.isLogged();, estás asignando el observador devuelto por isLogged() a isLoggedIn$. Por lo tanto, en la plantilla, necesitas referenciar isLoggedIn$ en lugar de llamar a this.authService.isLogged().

    En otras palabras, cambia this.authService.isLogged() | async por isLoggedIn$ | async.

Comments are closed.