angular - Angular中的条件验证问题
问题描述
我在 Angular 9 中有一个表单,我想根据下拉框的条件对其进行验证。在我的情况下,表单有一个字段 massEmailType 并且可以有 2 个值,农场或联系人。我想要的是,如果用户选择 Farm tractList 是必填字段。
createForm(): FormGroup {
return this.fb.group(
{
emailCampaign: [{value: '', disabled: false}, Validators.required],
massEmailType: [{value: '', disabled: false}, Validators.required],
tractList: ['', RxwebValidators.required({conditionalExpression: 'x => x.massEmailType === "Farm"' })],
massEmailSender: [{value: '', disabled: false}, Validators.required],
})
}
初始验证有效,因此如果用户选择联系人,它将在没有 tractList 中的值的情况下进行验证。但是,如果用户改变主意并返回 Farm,它仍然显示表单有效。在初始验证后我需要做些什么以确保任何更改都可能再次使表单无效?
解决方案
使用 rxjs 订阅 massEmailType 控件的更改并验证值并根据该值设置验证器。
ngOnInit(): void {
const form = this.createForm()
form.controls.massEmailType.valueChanges.subscribe((data) => {
if (data === 'Farm') {
form.controls.tractList.setValidators([Validators.required]);
} else {
form.controls.tractList.setValidators([]);
}
});
}
createForm(): FormGroup {
return this.fb.group(
{
emailCampaign: [{ value: '', disabled: false }, Validators.required],
massEmailType: [{ value: '', disabled: false }, Validators.required],
tractList: [''],
massEmailSender: [{ value: '', disabled: false }, Validators.required],
});
}
推荐阅读
- python - CV2 光流函数不是确定性的
- java - Firebase 聊天应用程序没有像 whatsapp 那样显示消息
- c++ - C ++模板化元编程,检查结构是否有字段
- javascript - 如何在循环的每次迭代中等待异步操作完成
- java - 从 Java 源代码调用 Postgres 过程不起作用
- javascript - 单击 li 项目后更改 div 的背景颜色
- python - fetchall() psycopg2 返回空列表
- spring - Embedded Tomcat Hardening - 如何在 Spring Boot 中更改/覆盖广告服务器信息?
- regex - 使用 regexmatch 计算某些文本出现的次数
- django - 从模型实例引用的资产文件,如何限制对 URL 的访问