clearvalidators 不能在 Angular 6 表单控件中工作

Posted

技术标签:

【中文标题】clearvalidators 不能在 Angular 6 表单控件中工作【英文标题】:clearvalidators not working in angular 6 form control 【发布时间】:2019-04-06 18:08:53 【问题描述】:

我有两个表单组名称,如下所示。有时不会向用户显示一种表单。当两者都显示时,我没有问题。我有一个在表单有效时可见的按钮。

 <div
        *ngIf="showPersonalInfo"
        class="personalInfo"
        formGroupName="personalInfo"
      > 

 <div
        *ngIf="showFamilyInfo"
        class="familyInfo"
        formGroupName="familyInfo"
      > 

 <button
        *ngIf="InfoForm.valid"
        class="submitButton"
</button>

我使用下面的代码初始化我的表单。

this.InfoForm = this.formBuilder.group(
  personalInfo: this.getPersonalInfo(),
  familyInfo: this.getFamilyInfo(),
);

this.getFamilyInfo() 中的代码将 showFamilyInfo 设置为 true 或 false,并且在这两种情况下都会初始化表单,否则我的 html 会抛出 familyInfo 找不到。

我们的一项服务有时会查找成员资料并提取现有的家庭信息/个人信息并填充模型并将 showPersonalInfo/showFamilyInfo 设置为 true。

当 showFamilyInfo 为 false 时,我的 InfoForm.FamilyInfo 表单控件显示为无效。为了避免这个错误,我正在使用下面的代码清除验证器,但它仍然显示 familyInfo 表单控件状态无效。不过我的 PersonalInfo 是有效的。

当 showFamilyInfo 为 false 时如何忽略与 FmilyInfo 相关的所有内容,以便按钮可见。

this.InfoForm.get('familyInfo').clearValidators();
this.InfoForm.get('familyInfo').updateValueAndValidity();

【问题讨论】:

我在 Angular 6 中遇到了同样的问题。以下两个选项都不起作用 this.form.get('name').clearValidators() 和 this.form.controls['name'] .clearValidators 但暂时我已经根据我的功能应用了解决方案 【参考方案1】:

我认为您需要先清除错误,然后才能更新有效性。在链接的帖子中,Julia P. 的回答涵盖了如何清除错误。然后运行 ​​updateValueandValidity。 How can I manually set an Angular form field as invalid?

【讨论】:

以上是关于clearvalidators 不能在 Angular 6 表单控件中工作的主要内容,如果未能解决你的问题,请参考以下文章

element移除表单校验结果方法clearValidate如何使用

Jest - Angular 9 - 类构造函数 SomeComponentClass 不能在没有'new'的情况下被调用

element 关闭弹窗时清空表单信息

Vue处理表单校验

elementUI vue 编辑中的input的验证残留清除

vue项目:新增时清除表单验证注意事项