Angular:バリデーターの既存のセットに追加Formcontrol

Nov 26 2020

FormControlの既存のバリデーターのセットに追加またはプッシュするにはどうすればよいですか?配列として追加したい。次の答えは、それらすべてを一度に設定するだけです。

Angularで、コントロールの作成後にValidatorをFormControlに追加するにはどうすればよいですか?

Angular-バリデーターを動的に追加/削除します

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

回答

GyörgySzy Nov 26 2020 at 15:21

setValidators()は以前のバリデーターを削除するため、バリデーターを個別に収集し、たとえば2つの変数に保持し、必要に応じて1つのsetValidators()で設定することができます。


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

したがって、この方法では、それらを1つずつ設定する必要はありません。

(バリデーターはsetValidators()内の配列に格納されていないため、1回の呼び出しですべてのバリデーターをsetValidatorsに送信する必要があります。)

Noname Nov 27 2020 at 10:03

で配列を設定し、new Array<ValidatorFn>();バリデーターを個別に下にプッシュできます。

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