我在验证仅标记的复选框时遇到问题。首先,当组件初始化且所有复选框都被禁用时,如果他们单击保存按钮,则它应输出一个验证,表明您没有单击任何复选框。第二个验证是当您标记了一个复选框但没有输入任何数量时,它仅应标记为“此字段为必填”。现在,但是,当我单击保存按钮时,即使禁用了所有数量,也会出现错误“此字段是必需的”。我该如何解决?也请我评论的功能,也许这会有所帮助。谢谢。
请单击此处查看我的stackblitz链接:CODE LINK
patchValues() {
let rows = this.myForm.get('rows') as FormArray;
this.orders.forEach(material => {
material.materials.forEach(x => {
rows.push(this.fb.group({
checkbox_value: [null],
material_id: new FormControl({ value: x.id, disabled: true }, Validators.required),
material_name: x.name,
quantity: [null]
}));
// this.formArrayLength++;
});
});
}
答案 0 :(得分:1)
您需要为表单和数组中的子表单创建custom validators。
对于该格式,当选中其中一个复选框时有效。看起来像
formValidator(control: AbstractControl): { [key: string]: any } {
return control.value.rows.some(i => i.checkbox_value) ? null : { 'checkboxReq': 'Some checkbox field is required' }
}
将其添加到表单中
this.myForm.setValidators([this.formValidator.bind(this)])
您可以在模板中使用myForm.getError('checkboxReq')
<small class="form-text text-muted danger">{{myForm.getError('checkboxReq')}}</small>
对于子表单,需要另一个验证器
subFormValidator(control: AbstractControl): { [key: string]: any } {
return control.value.checkbox_value ? { 'req': 'This field is required' } : null
}
在初始化子表单时添加它
(this.fb.group({
checkbox_value: [null],
material_id: [{ value: x.id, disabled: true }],
material_name: x.name,
quantity: [null]
}, [this.subFormValidator.bind(this)]));
模板
<small class="form-text text-muted danger" *ngIf="row.invalid && row.touched">This field is required</small>