ERROR TypeError:无法读取属性' push'在Angular 5中未定义

时间:2018-03-25 18:27:44

标签: angular typescript angular5

从html模板调用addAdd()时出错。

this.personalForm = this.fb.group({
        user: this.fb.group({
            address: this.fb.array([this.addRows()])     
            }),
addRows() {
  return this.fb.group({
    country: ['']});

addAdd() {
  const control:FormArray = this.personalForm.get[`address`] as FormArray;
  control.push(this.addRows());
}

我在哪里做错了

ERROR TypeError: Cannot read property 'push' of undefined

html代码

<button (click)="addAdd()">Add Address</button>
 <div formArrayName="address">
    <div *ngFor="let add of personalForm.controls?.address?.controls; let i=index" [formGroupName]="i">
    <label>Country</label>
  <input type="text" class="form-control"   formControlName="country" 
  placeholder="Country" />
 </div> 
</div>

3 个答案:

答案 0 :(得分:1)

在这种情况下,控制可能为null,请添加对null和length的检查。

const control:FormArray = this.personalForm.get[`address`] as FormArray;
if(control && control.length >0){
  control.push(this.addRows());
}

答案 1 :(得分:1)

get是一个函数,而不是一个对象。此外,您必须指定控件的完整路径。

const control:FormArray = this.personalForm.get(['user', 'address']) as FormArray;

const control:FormArray = this.personalForm.get('user.address') as FormArray;

答案 2 :(得分:0)

Thanks Marko ! this is working, cool !

addAdd() {
    const control:FormArray = this.personalForm.get('user.address') as FormArray;  
    control.push(this.addRows());  
  }