angular - Angular 表单构建器验证对象中的至少一个属性为真
问题描述
如果这些复选框之一不正确,我想使表单无效。这是我编写 HTML 的方式。
<div class="col-md-12 labelparent" formGroupName="Source">
<label class="col-md-3">DAM Source </label>
<span class="col-md-3">
<input type="checkbox"
name="referenceType"
formControlName="DAMSource"
id="DAMSourcecheckbox" />
<label for="DAMSourcecheckbox">DAM</label>
<input type="checkbox"
name="referenceType"
formControlName="ContentStudioSource"
id="ContentStudioSourceheckbox" />
<label for="ContentStudioSourceheckbox">Contentstudio</label>
<input type="checkbox"
name="referenceType"
formControlName="LocalSource"
id="LocalSourcecheckbox" />
<label for="LocalSourcecheckbox">Custom</label>
</span>
</div>
还有我的formGroup
'Source': this.fb.group({
DAMSource: false,
ContentStudioSource: false,
LocalSource: false
})
如何在此添加验证器,如果未单击复选框,则表单无效,或者在 Source 对象中,它们的键都不为真?
解决方案
这是如何做到这一点的基本要点。
我准备了Stackblitz但我不确定它是否有效
keys = ['ck1','ck2','ck3','ck4','ck5','ck6'];
fg: FormGroup;
constructor(@Inject(FormBuilder) private fb: FormBuilder) { }
ngOnInit() {
this.fg = this.buildForm();
}
buildForm(): FormGroup {
let group = {};
this.keys.forEach(k => group[k] = new FormControl(false));
return this.fb.group(group, { validator: this.truthyValidator() });
}
truthyValidator() {
return (group: FormGroup) => {
this.keys.forEach(k => {
if (group.controls[k].value === false)
group.controls[k].setErrors({ falsey: 'Cannot be false' });
else
group.controls[k].setErrors(null);
});
}
}
推荐阅读
- c# - 我将如何构建类以促进嵌套元素以及 XML 中的文本以进行 C# 反序列化
- html - 按钮内的 antd 复选框
- node.js - 我的回调函数出错
- memory-management - 为什么我的 Kmeans CuPy 代码中有“OutOfMemoryError”?
- javascript - 谷歌标签管理器增加了最大的内容绘画。页面完全加载后如何加载?
- laravel - 专用网络上完全随机的 502 错误(apache)
- javascript - 使用 Nightwatch 使用 GeckoDriver 将焦点切换到 iframe
- r - 有没有办法用 pdp 在 3D 局部绘图上添加 yhat 的颜色
- google-admin-sdk - 有没有办法使用脚本在 Google 管理控制台上启用单个标志?
- macos - 如何创建应在 macOS 上启动 shell 脚本的应用程序图标