Angular2反应式表单,如何将FormGroup和FormArray传递给子组件

Gal*_*dor 5 forms angular

我想从问题库构建一个动态表单,就像 angular2 中的动态表单食谱一样。所以我有一个 QuestionComponent:

<div [formGroup]="form">

  <ul *ngIf="question.multi" [formArrayName]="question.key">
    <li *ngFor="let control of form.get(question.key).controls; let lix=index">

      <div>

        <app-text-box [controlName]="lix"></app-text-box>

      </div>
    </li>
  </ul>

  <div *ngIf="!question.multi">
    <app-text-box [controlName]="question.key"></app-text-box>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

基于question.multi有一个单一的FormControl或一个FormArray。表单输入位于 TextBoxComponent 中:

<input class="form-control"
 [formControlName]="controlName"
 [id]="controlName" type="text">
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

./TextBoxComponent 类 TextBoxComponent 中出现错误 - 内联模板:0:28 原因如下: formControlName 必须与父 formGroup 一起使用

如何将 FormGroup 的信息获取到组件中?

我尝试了这种方式:QuestionComponent:

<div [formGroup]="form" class="col-md-10" >

  <ul *ngIf="question.multi" [formArrayName]="question.key" class="list-group">
    <li *ngFor="let control of form.get(question.key).controls; let lix=index">

      <div>

        <app-text-box [form]="form" [arrayName]="question.key" [controlName]="lix"></app-text-box>

      </div>
    </li>
  </ul>

  <div *ngIf="!question.multi">
    <app-text-box [form]="form" [controlName]="question.key"></app-text-box>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

文本框组件:

<div [formGroup]="form">
  <div [formArrayName]="arrayName">
    <input  class="form-control" [formControlName]="controlName" [id]="controlName" type="text">
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

但是当没有 FormArray 时,就会产生错误。