如何清除另一个组件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
}