2017-04-04 66 views
0

Angular2:我创建这个表格嵌套表格组

this.cardForm = this.fb.group({ 
    number: ['', Validators.compose([Validators.required, this.validateCardNumber])], 
    holderName: ['', Validators.required], 
    expiry: this.fb.group({ 
     expirationMonth: ['', Validators.required], 
     expirationYear: ['', Validators.required], 
    }), 

正如你所看到的,我创建了一个名为expiry嵌套表格组。到我的模板:

<form [formGroup]="cardForm" novalidate="novalidate" (ngSubmit)="onSave()"> 
    <div class="form-group"> 
    <label for="cardnumber">Card number</label> 
    <input 
     type="text" 
     formControlName="number" 
     placeholder="Card number" 
     name="cardnumber" 
     class="input-transparent form-control"> 
    </div> 
    ... 
    <div class="form-group" formGroupName="expiry"> 
    <label for="expirationmonth">Expiration month</label> 
    <select2 id="default-select" 
     name="expirationmonth" 
     [data]="months$ | async" 
     [width]="250" 
     [options]="select2Options"> 
    </select2> 

    <label for="expirationyear">Expiration year</label> 
    <select2 id="default-select2" 
     name="expirationyear" 
     [data]="years$ | async" 
     [width]="250" 
     [options]="select2Options"> 
    </select2> 
    </div> 

我得到这个错误:

ERROR Error: formGroup expects a FormGroup instance. Please pass one in. 

    Example: 


<div [formGroup]="myGroup"> 
    <input formControlName="firstName"> 
</div> 

In your class: 

this.myGroup = new FormGroup({ 
    firstName: new FormControl() 
}); 

任何想法?

+0

,我们需要更多的代码,如果是'this.cardForm = this.fb.group( ...)叫? – n00dl3

+0

为select2组件添加代码 – yurzui

+0

@ n00dl3,它在构造函数的组件上调用。 – Jordi

回答

3

在您的组件端设置了this.cardForm之前,您的视图正在加载。

尽量把*ngIf

<form *ngIf="cardForm" [formGroup]="cardForm" novalidate="novalidate" (ngSubmit)="onSave()"> 

或者尝试在一个div来封装与*ngIf

<div *ngIf="cardForm"> 
    <form [formGroup]="cardForm" novalidate="novalidate" (ngSubmit)="onSave()"> 

    </form> 
    </div> 
+6

或在正确的时间初始化您的表单:D! – n00dl3

+1

我已经初始化成了'ngOnInit'。它现在有效。 – Jordi