Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

146
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda