Angular: Dodaj do istniejącego zestawu walidatorów Formcontrol

Nov 26 2020

Jak dodać lub wypchnąć do istniejącego zestawu walidatorów w FormControl? Chcę dodać jako tablicę. Następująca odpowiedź ustawi je wszystkie naraz.

W Angular, jak dodać Validator do FormControl po utworzeniu formantu?

Angular - Dynamiczne dodawanie / usuwanie walidatorów

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

Odpowiedzi

GyörgySzy Nov 26 2020 at 15:21

SetValidators () USUWA poprzednie walidatory, więc możesz chcieć zebrać swoje walidatory osobno i na przykład zachować je w dwóch zmiennych i ustawić je za pomocą jednej setValidators () w razie potrzeby.


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

Dzięki temu nie musisz ustawiać ich pojedynczo.

(Ponieważ walidatory nie są przechowywane w tablicy indside setValidators (), musisz wysłać wszystkie walidatory do setValidators za pomocą tylko jednego wywołania).

Noname Nov 27 2020 at 10:03

Możesz ustawić tablicę za pomocą new Array<ValidatorFn>();i wypychać walidatory poniżej indywidualnie.

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