在FormArray上为必需和最小长度设置formvalidator

时间:2018-07-18 06:33:15

标签: angular angular-reactive-forms

我正在寻找在formArray元素上设置最小长度验证器。

这是我创建表单的方式。

this.fb.group({
            FieldName: ['', [Validators.required, Validators.pattern(/^\S*/)]],
            Treatment: '',
            Properties: this.fb.group(
                {
                    contentType: this.fb.array([]),
                    multipleItems: false,
                    keyType: this.fb.group({
                        'Type': '',
                        'Prefix': '',
                        'Suffix': ''
                    }),
                }
            )
        });

这是我正在尝试的代码。它不会被应用,并且表单完全忽略了它并变得有效。

this.fieldForm.get('Properties.contentType').setValidators([Validators.required, Validators.minLength(1)]);

2 个答案:

答案 0 :(得分:2)

SetFormGroup中控件的验证器:this.myForm.controls['controlName'].setValidators([Validators.required])

Remove来自FormGroup中的控件的验证者:this.myForm.controls['controlName'].clearValidators()

Update FormGroup一旦运行以上任一行。 this.myForm.controls['controlName'].updateValueAndValidity()

Source

所以上下文

    this.fieldForm.controls['Properties.contentType'].setValidators([Validators.required, Validators.minLength(1)]);
    this.fieldForm.controls['Properties.contentType'].updateValueAndValidity()

答案 1 :(得分:1)

设置新的验证器后,您必须致电updateValueAndValidity()

this.fieldForm.get('Properties.contentType').setValidators([Validators.required, Validators.minLength(1)]);
this.fieldForm.get('Properties.contentType').updateValueAndValidity();

还要注意,它必须是this.fieldForm.get('Properties').get('contentType').setValidators([Validators.required, Validators.minLength(1)]);

因为您有Properties控件的子表单组。