类型“ AbstractControl”上不存在属性“控件”。角度6

时间:2018-10-02 07:54:26

标签: angular typescript angular6

在for循环中使用setvalue时。

一切都很好,但是会出错:-

  

类型“ AbstractControl”上不存在属性“控件”。

角度6 我们如何解决这个问题..

for (let i = 0; i < this.experience.length; i++) 
  { 
     if ( i !== 0 ){ 
       const control = <FormArray>this.expGroup.controls['expArray'];
       control.push(this.getExp()); 
     }
  this.expArray.at(i).controls['company_Name'].setValue(this.experience[i].company_Name);
  this.expArray.at(i).controls['position'].setValue(this.experience[i].position); 

  this.expArray.at(i).controls['employee_id'].setValue(this.experience[i].employee_id); 

  this.expArray.at(i).controls['time_prefered'].setValue(this.experience[i].time_prefered);   this.expArray.at(i).controls['work_exp_year'].setValue(this.experience[i].work_exp_year);   this.expArray.at(i).controls['date_of_joining'].setValue(this.experience[i].date_of_joining);   
  this.expArray.at(i).controls['id'].setValue(this.experience[i].id);    
}

1 个答案:

答案 0 :(得分:1)

建议不要使用直接访问每个controls元素的FormArray属性,而是建议使用getter从FormArray访问所需的控件。在按索引迭代FormArray时,它会将每个数组元素公开为AbstractControl类型,而该类型不能直接访问controls属性。因此,您可以使用以下代码-

this.expArray.at(i).get('company_Name').setValue(this.experience[i].company_Name);

为FormArray内部的每个控件设置值。

这是完整的代码-

    for (let i = 0; i < this.experience.length; i++) 
      { 
         if ( i !== 0 ){ 
           const control = <FormArray>this.expGroup.controls['expArray'];
           control.push(this.getExp()); 
         }
     this.expArray.at(i).get('company_Name').setValue(this.experience[i].company_Name); 
     this.expArray.at(i).get('position').setValue(this.experience[i].position); 

     this.expArray.at(i).get('employee_id').setValue(this.experience[i].employee_id); 

     this.expArray.at(i).get('time_prefered').setValue(this.experience[i].time_prefered);
     this.expArray.at(i).get('work_exp_year').setValue(this.experience[i].work_exp_year);
     this.expArray.at(i).get('date_of_joining').setValue(this.experience[i].date_of_joining);   
     this.expArray.at(i).get('id').setValue(this.experience[i].id);    

   }