1
resposta

[Dúvida] Diretiva personalizada não funciona

A diretiva personalizada não funciona em meu projeto, mesmo eu tendo copiado literalmente todos os codigos sem nenhum erro. O template não a reconhece

<div class="formulario__campo">
        <label class="campo__etiqueta" for="nascimento">Nascimento</label>
        <input 
            name="nascimento" 
            id="nascimento" 
            type="date"
            class="campo__escrita" 
            ngModel 
            required
            atrocidade
            #nascimento="ngModel" 
        />

        <div *ngIf="(nascimento?.invalid && nascimento?.touched) || nascimento?.dirty">
            <app-mensagem  *ngIf="nascimento?.errors?.['required']" mensagem="A data de nascimento deve ser preenchida."></app-mensagem>
            <app-mensagem  *ngIf="nascimento?.errors?.['maiorIdadeValidator']" mensagem="O usuário deve ter mais de 18 anos."></app-mensagem>
       </div>
      </div>
import { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';
import { Directive } from '@angular/core';

@Directive({
  selector: '[atrocidade]',
  providers: [{
    provide: NG_VALIDATORS, 
    useExisting: MaiorIdadeDirective, 
    multi: true
  }]
})

export class MaiorIdadeDirective implements Validator {

  constructor() { }

  validate(control: AbstractControl): ValidationErrors | null {
      const dataNascimento = control.value;
      const anoNascimento = new Date(dataNascimento).getFullYear();
      const anoNascMais18 = anoNascimento + 18;
      const anoAtual = new Date().getFullYear();

      const ehMaior = anoNascMais18 <= anoAtual;

      return ehMaior ? null : {'maiorIdadeValidator': true};
  }

}
1 resposta

Você colocou a diretiva no declarations do app.module? as vezes o ng generate não faz automaticamente