angular - 嵌套FormGroup FormControl上的角度反应表单条件验证?
问题描述
我正在开发一个用户表单。
我正在总结我的问题,如果用户勾选了医疗政策复选框,那么用户必须填写医疗政策详细信息。
用户表单组代码如下:
let userForm = this.myFormBuilder.group({
userName: ['',Validators.required],
password: ['',Validators.required],
isMedicalPolicy: [false],
medicalPolicyInfo: this.myFormBuilder.group({
policyNumber: ['',Validator.maxLength(10)], // how to apply conditional required validation here,
if is isMedicalPolicy value is true.
});
});
请帮助解决这个问题。
解决方案
您可以观察单个表单控件值的更改,然后根据该值更改其他控件的验证。
例子:
const isMedicalPolicyControl = this.userForm.get('isMedicalPolicy');
const policyNumberControl = this.userForm.get('medicalPolicyInfo.policyNumber');
this.subscription = isMedicalPolicyControl.valueChanges.subscribe(value => {
if (value) {
policyNumberControl.setValidators([
Validators.required,
Validator.maxLength(10)
]);
}
else {
policyNumberControl.setValue('');
policyNumberControl.setValidators(null);
}
policyNumberControl.updateValueAndValidity();
});
当您的组件被销毁时,您需要取消订阅可观察的 valueChanges。
推荐阅读
- javascript - 如何在模式中显示动态内容?
- python - 从一些 HTML 标签中提取文本
- postgresql - PostgreSQL 在多大程度上支持并行 DDL?
- java - 更新值为 List 的 HashMap 的条目
- c++ - 当统一块大小很小时,是否应该在 glUniform 上使用统一缓冲区对象?
- javascript - 允许和允许之间的 JavaScript 差异的 Google Chrome 权限设置(默认)
- python - 在 Python Plotly 中将数据点名称写入数据点的正上方
- linux - Apache 重写规则 .HTACCESS 文件
- google-app-engine - 每个 F1 实例的 App Engine 兆周期/秒
- javascript - 为什么在chrome上出现上传错误,而不是firefox?