Angular: agregar al conjunto existente de validadores Formcontrol

Nov 26 2020

¿Cómo agrego o envío a un conjunto existente de validadores en FormControl? Quiero agregar como una matriz. La siguiente respuesta solo los configurará todos a la vez.

En Angular, ¿cómo agregar Validator a FormControl después de que se crea el control?

Angular: agregue / elimine validadores dinámicamente

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

Respuestas

GyörgySzy Nov 26 2020 at 15:21

SetValidators () ELIMINA los validadores anteriores, por lo que es posible que desee recopilar sus validadores por separado y, por ejemplo, mantenerlos en dos variables y configurarlos con un setValidators () según sea necesario.


    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)
    }

De esta manera, no es necesario configurarlos uno por uno.

(Como los validadores no se almacenan en una matriz dentro de setValidators (), debe enviar todos los validadores a setValidators con una sola llamada).

Noname Nov 27 2020 at 10:03

Puede establecer una matriz con new Array<ValidatorFn>();y enviar validadores a continuación 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));