經過我的研究&實驗,我發現一個答案給我的問題,所以自己回答。如果它節省了一些人的時間,那麼我會很高興。
如果你想創建一個嵌套的組分反應形式,那麼你可以做如下
我在這裏創建一個表單有兩個嵌套組件一個文本框&其他的單選按鈕
你父組件可以像這樣
<form [formGroup]="myForm">
<child-textbox-component [parentFormGroup]="myForm">
</child-textbox-component>
<child-radio-button-component [parentFormGroup]="myForm">
</child-radio-button-component>
</form>
我們傳遞FormGroup對象作爲輸入已在父組件 被創建爲輸入到子組件的子組件S,他們將利用這一FormGroup對象在他們的 組件設計之類的特定控制
你的孩子的組件會是這樣
兒童文本分量
<div class="form-group" [formGroup]="parentFormGroup">
<label>
{{control.caption}}
</label>
<input class="form-control" type="text" [title]="control.toolTip"
[attr.maxlength]="control.width" [name]="control.name"
[value]="control.defaultValue" [formControlName]="control.name"/>
</div>
兒童放射按鈕組分
<div class="form-group" [formGroup]="parentFormGroup">
<label>
{{control.caption}}
</label>
<div>
<label *ngFor="let value of control.values; let idx = index"
class="radio-inline" [title]="control.tooltip">
<input type="radio" [name]="control.name" [formControlName]="control.name"/>
{{ value }}
</label>
</div>
</div>
下面是要顯示這些模型類保持數據控制10個子組件。
這樣你就可以使用嵌套組件 生成你的表單,這樣你就不需要在單個的 組件中擁有你的表單(可以說大表單)。您可以將其分解爲多個子組件&表單將 易於創建&還可以使用角2的反應形式進行維護。您也可以輕鬆添加驗證。
我回答這個
something similar on stackoverflow
angular 2 dynamic forms
也許每個組件都會保留它自己的驗證器。在提交時,每個組件通過服務或事件發射器將值發送給父組件...未測試,但是這應該起作用 – mickdev
我無法在子組件中的html中添加formControlName屬性(這對於反應形式是必需的) ,它是拋出父指令的錯誤fromGroup不存在(因爲它存在於父項中) –
這就是爲什麼每個組件都應該保留它自己的formControlName和驗證器。父組件角色將實例化表單並獲取提交的所有數據。子組件將觸發有效或錯誤事件並通知父級允許或不允許提交...查看[嵌套模型驅動表單](https://scotch.io/tutorials/how-to-build-nested -model-driven-forms-in-angular-2) – mickdev