angular - 如果填写了一个字段,则需要删除 Angular Form Arrays
问题描述
我在表单数组需要验证方面苦苦挣扎,如果给定字段之一已填充,我必须从表单数组中删除验证。
这是我的代码
.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 属性,但是如果我不确定是否应该这样做。我唯一的事情是来自这三个,如果一个被填满,那么其他两个不应该被要求。
从上面可以看到,我尝试使用自定义验证器,但这没有帮助
解决方案
推荐阅读
- algorithm - 处理循环群的算法
- r - 使用 R 标准化日期格式
- microsoft-graph-api - Azure AD B2C:Mcrosoft Graph API:将用户分配给组
- android - 将 ScaleType.MATRIX 设置为 Custom ImageView 会缩小图像的初始显示
- php - How to use class named "Case"?
- performance - Docker Container CPU usage Monitoring
- ruby-on-rails - 如何使用 iframe 在此应用的另一个页面中显示 rails 应用的页面?
- javascript - Firefox blocking ajax post request
- ios - Should I use `weak self` when making asynchronous network request?
- python - 加速完美掉期计算 - 避免循环