Angular: Adicionar ao Conjunto Existente de Validadores Formcontrol

Nov 26 2020

Como faço para adicionar ou enviar para um conjunto existente de validadores no FormControl? Eu quero adicionar como uma matriz. A resposta a seguir apenas definirá todos de uma vez.

No Angular, como adicionar Validator ao FormControl depois que o controle é criado?

Angular - adicionar / remover validadores dinamicamente

newFormControl.setValidators([Validators.required])
newFormControl.setValidators([Validators.pattern("^[0-9]*$")])
newFormControl.setValidators([Validators.maxLength])

Respostas

GyörgySzy Nov 26 2020 at 15:21

O setValidators () REMOVE os validadores anteriores, então você pode querer coletar seus validadores separadamente, e por exemplo mantê-los em duas variáveis, e configurá-los com um setValidators () conforme necessário.


    const validators1 = [Validators.required, Validators.pattern("^[0-9]*$"), Validators.maxLength(10)])]
    const validators2 = [Validators.required]

    if( if_you_want_all_three_validators ){
        newFormControl.setValidators(validators1)
    } else {
        // by default you want only one validator:
        newFormControl.setValidators(validators2)
    }

Dessa forma, você não precisa configurá-los um por um.

(Como os validadores não são armazenados em uma matriz dentro de setValidators (), você deve enviar todos os validadores para setValidators com apenas uma chamada.)

Noname Nov 27 2020 at 10:03

Você pode definir uma matriz com new Array<ValidatorFn>();, e empurrar os validadores abaixo individualmente.

let validatorList = new Array<ValidatorFn>();
validatorList.push(Validators.required);
validatorList.push(Validators.pattern("^[0-9]*$"));
validatorList.push(Validators.maxLength(item.characterLimit));
newForm.addControl('test', new FormControl(d'5', validatorList));