Estou tento um problema: Tenho um componente (pai) que tem um botão, e outro componente (filho) que mostra um toast ao clicar nesse botão. O componente filho tem uma inbound properties, onde recebe o valor do componente pai. Acontece que a mensagem só é mostrada na primeira vez que clico no botão, depois o valor de
showToast
não sai de valor falso.
O que eu acho que pode estar acontecendo é o componente pai tá perdendo a referência da inbound properties. Eu envio um valor true por inbound properties, o toast é mostrado, depois de 2000ms o próprio componente toast.component muda o valor para false, assim o toast não né mais exibido. Quando o pai envia novamente o valor true, esse valor não é alterado, não mostrando mais o toast.
Fiz um exemplo do erro que eu estou obtendo:
app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
mostrar: boolean = false;
mostrarMensagem() : void {
this.mostrar = true;
}
}
app.component.html
<h1>Teste do Toast</h1>
<button type="button" (click)="mostrarMensagem()" class="btn btn-primary">Mostrar mensagem</button>
<app-toast [showToast]="mostrar"></app-toast>
toast.component.ts
import { Component, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
@Component({
selector: 'app-toast',
templateUrl: './toast.component.html',
styleUrls: ['./toast.component.css']
})
export class ToastComponent implements OnInit {
@Input() showToast: boolean = true;
constructor() { }
ngOnInit(): void {
}
}
toast.component.html
<ngb-toast class="bg-success text-light" *ngIf="showToast" (hide)="showToast = false" delay="2000">
Teste do toast
</ngb-toast>
<p>mostrar mensagem: {{ showToast }}</p>
Obs: estou utilizando o Ng Bootstrap. https://ng-bootstrap.github.io/#/components/toast/overview