添加/删除反应式表单验证器以动态创建的输入

问题描述 投票:0回答:4

我在 Angular 4 中创建了一个表单,它允许用户单击表单中的“添加”或“删除”按钮来向表单添加/删除字段。我使用 ngFor 从数组创建屏幕上的 html 输入(通过添加函数放大,或通过删除函数缩小)。

在 html 模板中,我可以在表单 formControlName="control{{index}}" 中添加 formControlName,以确保每个新输入都有一个 formcontrol。

但是我如何动态地添加和删除这些输入的验证器

angular angular2-forms
4个回答
63
投票

你可以看一下这个文档吗https://angular.io/api/forms/AbstractControl#updateValueAndValidity,

对于添加/删除控件,您可以使用这些方法

添加控件/删除控件

对于值和验证器,您可以像这样使用

 this.form.controls['test_control'].setValidators([Validators.required])
 this.form.controls['test_control'].updateValueAndValidity()

3
投票

来源链接

对于 Angular 11 使用 setValidators()updateValueAndValidity() 方法

  setRequired() {
    this.profileForm.controls.firstName.setValidators([Validators.required]);
    this.profileForm.controls.firstName.updateValueAndValidity();
  }

  unsetRequired() {
    this.profileForm.controls.firstName.setValidators(null);
    this.profileForm.controls.firstName.updateValueAndValidity();
  }

2
投票

Angular 13。它对我有用......

OnInit 函数:

ngOnInit() {
    this.form.get('type')?.valueChanges.subscribe((val) => {
      if (val) {
        switch (val) {
          case 1:
            this.removeValidators(['comment', 'id']);
            this.addValidators(['desc', 'options']);
            break;
          case 2:
            this.removeValidators(['desc', 'options', 'comment']);
            this.addValidators(['id']);
            break;
        }
      }
    });
}

Func(添加/删除验证器):

addValidators(controls : string[]){
    controls.forEach(c => {
        if(['desc','comment'].includes(c)){
            this.form.get(c)?.setValidators([Validators.required,Validators.maxLength(250)]);
        } else {
            this.form.get(c)?.setValidators(Validators.required);
        }
        this.form.get(c)?.updateValueAndValidity();
    });
}

removeValidators(controls : string[]){
    controls.forEach(c => {
        this.form.get(c)?.clearValidators();
        this.form.get(c)?.updateValueAndValidity();
    });
}

0
投票

我不确定为什么还没有人发布这个...但在 Angular 16 中你可以使用

addValidators()
方法。

https://angular.io/api/forms/AbstractControl#addvalidators

© www.soinside.com 2019 - 2024. All rights reserved.