首页 > 解决方案 > 将验证器添加到 formGroup 而不删除以前添加的验证器

问题描述

有什么方法可以添加验证器并将其添加到表单组而不删除之前可能已添加的任何验证器。

假设我有一个很大的 FormGroup,并且在某个时候我需要添加一个自定义验证器。setValidators删除可能已添加到其中的任何验证器。formGroup.serValidators([customValidation, fromGroup.validator])进行group自定义验证null。有任何想法吗?

这是我到目前为止所得到的:

const customValidation(thing, otherThing): ValidatorFn {
 // The group is null if I do formGroup.serValidators([customValidation, fromGroup.validator])
 return (group: FormGroup): ValidatorErros | null => {
 ... validate stuff
}

methodThatAddCustomValidator(formGroup) {
  formGroup.serValidators([customValidation, fromGroup.validator]);
  formGroup.updateValueAndValidity();
}

编辑:我得到了一些很好的问题和建议。只是想让它与我的架构一起工作。我想知道有什么办法可以:

formGroup.validator ?
  formGroup.validator.push(customValidation) :
  formGroup.setValidators(customValidation);

  formGroup.updateValueAndValidity();

^ 这就是答案

标签: angularangular-forms

解决方案


我建议将您的验证器数组存储在一个单独的变量中,在运行时随意填充它,然后执行 setValidators 传递该变量。使用 updateValueAndValidity 以及要考虑的新验证器集。

formGroup: FormGroup;
validators: ValidatorFn[] = [Validators.required];

constructor(fb: FormBuilder) {
  this.formGroup = fb.group({
    field: ['', validators];
  });
}

ngOnInit() {
  this.addValidator(Validators.minLength(2));
  this.updateFieldValidation(this.formGroup.controls.field);
}

addValidator(validator: ValidatorFn) {
    this.validators.push(validator);
}

updateFieldValidation(control: AbstractControl) {
  control.setValidators(this.validators);
  control.updateValueAndValidity();
}


推荐阅读