Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

147
Vistas
Hacer botón para esperar a que se resuelva el método

Tengo un par de botones que quiero mostrar solo si el usuario ha iniciado sesión. Mi problema es que *ngIf simple no funciona como yo quiero. Por ejemplo, tengo este botón Agregar receta:

 <div class="background"> <button type="button" *ngIf="isUserAuthenticated" class="btn btn-primary float-right m-2" data-bs-toggle="modal" data-bs-target="#exampleModal" (click)="addClick()" data-backdrop="static" data-keyboard="false"> Add Coffee </button>

Es un botón para mostrar modal. Quiero que ese botón se muestre solo si el usuario está autenticado. Así es como se ve mi .ts:

 export class RecipeDetailsComponent implements OnInit { ... public isUserAuthenticated: boolean = false; ngOnInit(): void { this.userService.authChanged .subscribe(res => { this.isUserAuthenticated = res; }) }

y mis métodos de servicio de usuario para verificar si están autenticados:

 export class UserService { private _authChangeSub = new Subject<boolean>() public authChanged = this._authChangeSub.asObservable(); public sendAuthStateChangeNotification = (isAuthenticated: boolean) => { this._authChangeSub.next(isAuthenticated); } public isUserAuthenticated = (): boolean => { const token = localStorage.getItem("token"); return token != null && this._jwtHelper.isTokenExpired(token) == false; }

El botón aparece solo si configuro isUserAuthenticated = true al declarar y se oculta si es falso. Supongo que el botón lee la propiedad isUserAthenticated y se muestra antes de ngOnInit. ¿Cómo puedo retrasar la visualización del botón hasta que se resuelva ngOnInit o simplemente actualizar después de eso?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si entiendo su pregunta, tiene problemas debido al tiempo. Su código no incluye cuándo o cómo cambia el valor, pero supongo que el valor cambia antes de que se inicialice su componente y, por lo tanto, ¿se está suscribiendo tarde?

Si es así, recomiendo cambiar

 private _authChangeSub = new Subject<boolean>()

a

 private _authChangeSub = new ReplaySubject<boolean>(1);

De esta forma, incluso cuando se suscriba después de que se haya emitido el valor, el componente seguirá recibiendo el valor. Consulte https://www.learnrxjs.io/learn-rxjs/subjects/replaysubject

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda