Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Duvida - Criar Validação Customizada

Eu criei um validador para testar 2 campos, se os 2 não forem iguais ele retornar erro, mas está dando um erro, como se estivesse retornando um obsevable.

import { AbstractControl } from '@angular/forms';

export function camposIguaisValidator(campo: AbstractControl){
    const senha = campo.parent.get('password').value;
    const confirmarSenha = campo.parent.get('passwordConfirm').value;
    console.log(senha);
    console.log(confirmarSenha);
    if(senha === confirmarSenha){
        return null;
    }else{
        return { camposIguais:  true};
    }

é um código simples, mas ele está dando esse erro:

RegistrarComponent.html:18 ERROR Error: Expected validator to return Promise or Observable.

no component está assim:

password:['', [Validators.required, Validators.minLength(4), Validators.maxLength(12)]],
     passwordConfirm:['', [Validators.required, Validators.minLength(4), Validators.maxLength(12)], camposIguaisValidator],

aparentemente o erro é por conta do parent.get, mas eu não sei como pegar o valor de outro jeito, alguém poderia me ajudar?

3 respostas
solução!

Boa noite, José! Como vai?

O único problema que consegui notar foi que vc colocou a sua validação na área das validações assíncronas! Por isso que o Angular está reclamando e pedindo que sua função de validação retorne uma Promise ou um Observable!

Experimente fazer assim:

passwordConfirm:['', [Validators.required, Validators.minLength(4), Validators.maxLength(12), camposIguaisValidator]]

Veja se assim as coisas passam a funcionar como vc esperava!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Muito obrigado, primeira vez que eu fiz uma validação customizada e pensei que o erro estava no código, kkkkk

Obrigado!

Por nada, José! Sempre que tiver qualquer dúvida é só mandar aqui no fórum da Alura!

Grande abraço e bons estudos, meu aluno!