验证器在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我实现了您在评论中提到的启用/禁用方法,这对我很有效:)