1
resposta

nao aparece mensagem com erro

no cadastro.html ao colocar o nome ou em qlq outro campo onde seja required deveria apresentar uma mensagem logo abaixo do input com o erro mas nao está aparecendo, so aparece o input em vermelho mas a mensagem nao aparece.

**cadastro.TS **

@Component({
  selector: 'app-cadastro',
  templateUrl: './cadastro.component.html',
  styleUrls: ['./cadastro.component.css']
})
export class CadastroComponent implements OnInit {

  constructor(private router: Router) { }

  ngOnInit(): void {
  }

  cadastrar(form: NgForm){
    if(form.valid){
      this.router.navigate(['./sucesso'])
    }else{
      alert('Formulario invalido')
    }
      console.log(form.controls);
  }
}

cadastro.HTML

in class="principal">
    <h2 class="principal__titulo">Dados do cadastro</h2>

    <form #f="ngForm" (ngSubmit)="cadastrar(f)" class="principal__formulario" id="formulario">
        <h3 class="principal__subtitulo">Dados pessoais</h3>
        <div class="formulario__campo">
            <label class="campo__etiqueta" for="nome">Nome Completo</label>
            <input
                    name="nome"
                    id="nome"
                    class="campo__escrita"
                    ngModel
                    required
                    minlength="2"
                    #nome="ngModel"
            />
            <div *ngIf="(nome?.invalid && nome?.touched) || nome?.dirty">
                <app-mensagem
                        *ngIf="nome?.errors?.['required']"
                        mensagem="O campo de nome deve ser preenchido."
                ></app-mensagem>
                <app-mensagem
                        *ngIf="nome?.errors?.['minlength']"
                        mensagem="O nome deve ter no mínimo 2 caracteres."
                >
                </app-mensagem>
            </div>
        </div>

**mensagem.TS **

@Component({
  selector: 'app-mensagem',
  templateUrl: './mensagem.component.html',
  styleUrls: ['./mensagem.component.css']
})
export class MensagemComponent implements OnInit {
@Input() mensagem = '';
  constructor() { }

  ngOnInit(): void {
  }

}

**mensagem.HTML **sem nada Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

E aí!

Pode ser um lance no seu HTML. Dá uma olhada na tag <div *ngIf="(nome?.invalid && nome?.touched) || nome?.dirty">. Aqui você tá checando se o campo é inválido, foi tocado ou é sujo (dirty), mas talvez falte alguma dessas condições pra mostrar a mensagem.

Já experimentou tirar o || nome?.dirty? Às vezes, o dirty pode não estar sendo setado como você espera.

E se isso não resolver, checa se o seu componente app-mensagem está sendo renderizado direitinho. Confirma se o CSS dele não tá escondendo as mensagens de alguma forma.