Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

145
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!