验证器在angular8中没有以反应形式清除?
我的验证器在angular8中没有以反应形式清除?,angular,typescript,reactive-forms,Angular,Typescript,Reactive Forms,我的组件中有一个表单,其中有一些字段在特定条件下显示。例如,如果我在UI中选择option1,则会显示一些字段;如果我在UI中选择option2,则会显示一些其他字段。因为我有条件字段,我必须显示,所以我也有条件表单字段验证器。下面是我的一些函数,我调用它们来设置选项选择的验证。UI上有3个选项,即:公司、经纪人、个人。用户可以选择这些选项中的任何一个,验证程序将根据此选项的选择进行设置 setCompanyTypeValidators(){ this.firstFormGroup.
组件中有一个表单
,其中有一些字段在特定条件下显示。例如,如果我在UI
中选择option1
,则会显示一些字段;如果我在UI
中选择option2
,则会显示一些其他字段。因为我有条件字段,我必须显示,所以我也有条件表单
字段验证器
。下面是我的一些函数,我调用它们来设置选项选择的验证。UI上有3个选项,即:公司、经纪人、个人。用户可以选择这些选项中的任何一个,验证程序将根据此选项的选择进行设置
setCompanyTypeValidators(){
this.firstFormGroup.get('companyName').setValidators(Validators.required);
this.firstFormGroup.get('nTn').setValidators(Validators.required);
}
setBrokerTypeValidators(){
this.firstFormGroup.get('companyName').clearValidators();
this.firstFormGroup.get('brokerName').setValidators(Validators.required);
this.firstFormGroup.get('nTn').setValidators(Validators.required);
this.firstFormGroup.get('cnic').setValidators(Validators.required);
this.firstFormGroup.get('refrences1').setValidators(Validators.required);
this.firstFormGroup.get('refrences2').setValidators(Validators.required);
}
setIndividualTypeValidators(){
this.firstFormGroup.get('name').setValidators(Validators.required);
this.firstFormGroup.get('cnic').setValidators(Validators.required);
}
默认情况下,在ngOnInit
页面加载时,我调用setCompanyTypeValidators()
设置company
类型validators
,当用户切换到另一个选项时,让我们假设启用Broker
类型,以便调用此函数
setradio(e: string): void {
this.selectedLink = e;
if (this.selectedLink === 'company') {
this.firstFormGroup.clearValidators();
this.firstFormGroup.markAsUntouched();
this.firstFormGroup.get('nTn').markAsUntouched();
this.firstFormGroup.reset();
this.firstFormGroup.updateValueAndValidity();
this.setCompanyTypeValidators();
} else if(this.selectedLink === 'broker'){
this.firstFormGroup.clearValidators();
this.firstFormGroup.markAsUntouched();
this.firstFormGroup.reset();
this.firstFormGroup.updateValueAndValidity();
this.setBrokerTypeValidators();
}else if(this.selectedLink === 'individual'){
this.firstFormGroup.clearValidators();
this.firstFormGroup.markAsUntouched();
this.firstFormGroup.reset();
this.firstFormGroup.updateValueAndValidity();
this.setIndividualTypeValidators();
}
}
表格
定义为
this.firstFormGroup = this._formBuilder.group({
phone: ['', Validators.required],
otpcode: [''],
companyName: [''],
nTn: [''],
brokerName: [''],
refrences1: [''],
refrences2: [''],
refrences: [''],
name: [''],
cnic: [''],
companynamepartnership: [''],
partnershipcnic: [''],
companynameproprietyship: [''],
proprietyshipntn: [''],
userTypeId: [3],
insertedBy: [''],
companyType: [''],
});
现在的问题是,若我切换到选项Broker
,那个么使用setradio
函数设置代理验证器
在填写了表单
的所有字段后,表单
仍然是无效的
。当我记录所有表单
字段
错误
时,它会使用此功能登录到控制台
logg(){
let fields = ['phone','otpcode','companyName','nTn','brokerName','refrences1','refrences2','refrences','name','cnic','companynamepartnership','partnershipcnic','companynameproprietyship','proprietyshipntn','userTypeId','insertedBy','companyType']
fields.forEach(item => {
console.log(this.firstFormGroup.get(item).errors,this.firstFormGroup.valid, item);
})
}
我不知道为什么会这样
检查您收到的设置收音机功能的值。顺便说一句,我建议不要使用clear/setValidators,而是启用/禁用窗体控件-一个控件。禁用的不是由角度检查值检查什么?我认为问题一定是在函数setRadio中。写'console.log(e)`来查看“e”的值@Eliseo我实现了您在评论中提到的启用/禁用方法,这对我很有效:)