【问题标题】:Angular reactive forms input is valid if pristine even if setValidators set to required即使 setValidators 设置为 required
【发布时间】:2018-01-15 01:08:36
【问题描述】:

我需要以编程方式更改 Angular Reactive Form 中输入的验证器。

所以我初始化表单:

...
limitNumber: [{ value: null, disabled: (this.id ? true : false) }]
...

稍后我启用输入并更改其所需的验证器:

this.newEventForm.get('limitNumber').enable();
this.newEventForm.get('limitNumber').setValidators(Validators.required);

紧接着,输入的状态是VALID,只要它保持原始状态。如果我编辑输入值并擦除,则它变为“无效”。

我的问题是,一旦我将验证器设置为 required,即使是原始的,我也需要输入无效。

我该怎么办?

***** 编辑 *****

我的目标是能够有条件地要求输入。 想象一下用户创建了一个事件。在新的活动表单中,它可以选择设置最大参与者数量。 如果用户切换输入(我们称之为“isLimited”),那么我需要一个新的输入来输入这个数字限制,它​​会被启用(我们称之为“limitNumber”输入),因此必须填写。

所以我的最终目标是仅当“isLimited”输入切换为 true 时才将此输入设为“必需”

【问题讨论】:

  • 为什么需要这样的功能这里的终极目标是什么,可能还有另一种简单的方法。
  • 您需要获取该 formControl,然后将其标记为已触摸,这可能会有所帮助 this.formControl.control.markAsUntouched({onlySelf: true});
  • @RahulSingh 我尝试了 Untouched、Touched 和 Dirty 都没有成功。在我的帖子中查看我的编辑,它解释了最终目标。希望更清楚

标签: angular angular-reactive-forms


【解决方案1】:

我只需要使用以下代码来检查有效性:

this.newEventForm.get('limitNumber').updateValueAndValidity();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 2011-08-12
    • 1970-01-01
    • 2020-06-20
    • 2023-03-24
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    相关资源
    最近更新 更多