首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套FormGroup FormControl上的角反应形式条件验证?

嵌套FormGroup FormControl上的角反应形式条件验证?
EN

Stack Overflow用户
提问于 2018-10-14 16:48:34
回答 2查看 3K关注 0票数 0

我正在开发一个用户表单。

我正在总结我的问题,如果用户勾选了医疗政策复选框,那么用户必须填写医疗政策细节。

用户表单组代码如下:

代码语言:javascript
运行
复制
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.
  });
});

请帮我一下。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-14 16:58:57

您可以监视单个窗体控件值的更改,然后根据该值更改其他控件的验证。

示例:

代码语言:javascript
运行
复制
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中取消订阅。

票数 2
EN

Stack Overflow用户

发布于 2020-06-22 17:38:49

您还可以简单地使用三元操作符,如:

代码语言:javascript
运行
复制
 medicalPolicyInfo: this.myFormBuilder.group({
    policyNumber: ['', isMedicalPolicy ? [ Validator.maxLength(10), Validators.required]:[]]
     
  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52804917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档