我正在努力进行表单数组所需的验证,如果必须填写给定字段之一,则必须从表单数组中删除验证。
这是我的代码
.ts
this.form = fb.group({
contract: this.fb.array([], this.AtLeastOneFieldValidator)
)};
ifContractEmpty() {
const eArray = this.contractArray.value;
const length = this.contractArray.length;
if (length > 1) {
if (
eArray[length - 1].salesOrderNumber == null &&
eArray[length - 1].customerPOnumber == null &&
eArray[length - 1].contractNumber == null
) {
return true;
} else {
return false;
}
}
}
AtLeastOneFieldValidator(group: FormGroup): { [key: string]: any } {
let isAtLeastOne = false;
if (group && group.controls) {
for (const control in group.controls) {
if (
group.controls.hasOwnProperty(control) &&
group.controls[control].valid &&
group.controls[control].value
) {
isAtLeastOne = true;
break;
}
}
}
return isAtLeastOne ? null : { required: true };
}
addContactGroup() {
return this.fb.group({
salesOrderNumber: "",
customerPOnumber: "",
contractNumber: ""
});
}
addContract() {
this.contractArray.push(this.addContactGroup());
}
get contractArray() {
return <FormArray>this.rForm.get("contract");
}
我在html上设置了required属性,但是如果不确定是否应该这样做。我唯一的选择是从这三个中选出一个,如果其中一个被填充,则其他两个则不需要。
我尝试使用自定义验证程序,如您从上方看到的那样,但这无济于事