在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);
}
答案 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);
}