1
resposta

[Dúvida] Duas mensagens de erro sendo exibidas

Meu codigo:

   <div class="formulario__dupla">
      <!-- Data de nascimento -->
      <div class="formulario__campo">
          <label class="campo__etiqueta" for="nascimento">Nascimento</label>
          <input name="nascimento" id="nascimento" type="date" class="campo__escrita" 
          ngModel 
          required
          maiorIdadeValidator
          #nascimento = "ngModel"/>
          <div *ngIf="(nascimento?.touched && nascimento?.invalid) || nascimento?.dirty">
            <!-- obrigatoriedade nascimento -->
            <app-mensagem *ngIf="nascimento?.errors?.['required']" mensagem="O campo de nascimento deve ser preenchido"></app-mensagem>
            <!-- obrigatoriedade de maioridade -->
             <app-mensagem *ngIf="nascimento?.errors?.['maiorIdadeValidator']" mensagem="O usuário precisa ser maior de idade"></app-mensagem>
          </div>
      </div>

Meu resultado:
Imagem contendo duas mensagens de erro no campo de data de nascimento

Por qual motivo estão sendo exibidas as duas mensagens de erro?

1 resposta

O que acontece é que o campo tem duas regras: required (obrigatório) e o maiorIdadeValidator (tem que ser maior de idade). Quando o campo está vazio, o Angular dispara as duas validações ao mesmo tempo, porque o nosso validador de maioridade não está verificando se o campo está vazio. Pra resolver isso, no maiorIdadeValidator a gente coloca uma condição bem simples: se não tiver nada preenchido, ele não faz nada e deixa só o required cuidar.

// se não tem valor, não valida aqui
if (!valor) {
return null; //
}