如何清除另一个组件angular 7反应表单上的所有验证器

如何清除另一个组件angular 7反应表单上的所有验证器,angular,validation,angular7,angular-reactive-forms,formgroups,Angular,Validation,Angular7,Angular Reactive Forms,Formgroups,我有一个基本上是一个大表单的应用程序。如果用户在一个组件上选择布尔值,则同级组件上的表单组应清除其所有验证 如何做到这一点 此方法禁用应用程序上的选项卡,当该选项卡被禁用时,还应清除该组件上所有表单组的所有验证: getSkipLogic() { this.skipLogicService.getSkipLogic().subscribe(data => { (data || []).forEach(item => { if (item.toQuestion

我有一个基本上是一个大表单的应用程序。如果用户在一个组件上选择布尔值,则同级组件上的表单组应清除其所有验证

如何做到这一点

此方法禁用应用程序上的选项卡,当该选项卡被禁用时,还应清除该组件上所有表单组的所有验证:

getSkipLogic() {
  this.skipLogicService.getSkipLogic().subscribe(data => {
    (data || []).forEach(item => {

      if (item.toQuestion === 'Q46') {
        const setValue = item.values === 'beforeDate' ? 'Yes' : 'No';
        this.contradictValue.Q46 = setValue;
        this.dependencySectionOne.get('BornBeforeJanuary1996').
          setValue(setValue);
      }
    });
  });
}

您可以通过html选择器引用该组件,并在父组件中访问其中的表单。例如,你可以把

<form-component #fm> </form-component> and then you can refer <button (click) = "fm.myForm.get(key).clearValidators();"> </button>
然后您可以参考

我假设您的模板的结构如下

<parent>
   <child1></child1>   // contains boolean value, which can be used to toggle form on child2 component 
   <child2></child2> // contains form
</parent>
<child2 #child2ref></child2>
在child2.component.ts中

import { EventEmitter} from '@angular/core';
Class child2 {
  @Output clearFormInChild2 = new EventEmitter<any>();

  onToggleOfBoolean() {
      this.clearFormInChild2.emit({//optional data});
  }
}
Class ParentComp {
  @ViewChild('child2ref') child2ref: Child2Component;

  clearFormInChild2() {
     this.child2ref.clearForm();
  }
}
clearForm() {
// clear form
}

谢谢,这似乎奏效了。然而,一旦我们解决了一个问题,当然会出现另一个问题。如果用户更改其输入值,是否有方法将所有验证程序重新应用于表单组?例如,布尔输入,用户选择“是”,表单验证已清除。他们现在单击“否”,表单验证应该重新应用。您可以使用.setValidators()方法,例如fm.myForm.get(key).setValidators(this.validationType[key]);验证类型是一个定义的数组,如validationType={'姓氏':[Validators.required,Validators.pattern('^[\\w\\s/-/(/)]{3,50}$','initials':[Validators.required,Validators.maxLength(4)]
clearForm() {
// clear form
}