我有这样的react 形式

this.form = this.formBuilder.group({
  ...
  email: [],
  receiveNewsletter: [],
  ...
})

我希望所有字段都是可选的,除非用户选中receiveNewsletter,否则邮箱字段应该是必需的.我该怎么做?

推荐答案

您必须观察复选框的值,并根据值receiveNewsletter添加或删除所需的验证器

this.form.controls.receiveNewsletter.valueChanges.subscribe(value => {
   if(value){
      this.form.controls.email.addValidators(Validator.required);
   } else {
      this.form.controls.email.removeValidators(Validator.required);
   }
   this.form.controls.email.updateValueAndValidity(); //remember to add this to update the form control state
})

Javascript相关问答推荐

在卡信息之间切换

在JS中获取名字和姓氏的首字母

可以的.是否可以在不预编译的情况下使用嵌套 Select 器?

Phaser 3 console. log()特定游戏角色的瓷砖属性

判断表格单元格中是否存在文本框

如何使覆盖div与可水平滚动的父div相关?

使用LocaleCompare()进行排序时,首先使用大写字母

我正在建立一个基于文本的游戏在react ,我是从JS转换.我怎样才能使变量变呢?

如何从HTML对话框中检索单选项组的值?

如何在使用rhandsontable生成表时扩展数字输入验证?

按下单键和多值

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

MongoDB受困于太多的数据

Docent.cloneNode(TRUE)不克隆用户输入

P5.js中的分形树

每隔3个项目交替显示,然后每1个项目交替显示

使用可配置项目创建网格

为什么我的SoupRequest";被重置为初始值,以及如何修复它?

在HTML中使用meta标记来指定定制元数据以用于使用JavaScript进行检索是不是一个坏主意?

JavaScript -如何跳过某个字符(S)来打乱字符串中的字符