一般我們使用Angular處裡表單的問題,對於資料結構較為複雜的Model,我們都會採用Data Driven的方式,也就是使用Reactive Form,因為這樣對於資料結構複雜的Model來說是比較容易維護與掌控。 回到今天的主題,我們將介紹使用 Reactive Form動態產生表單欄位。因為我們平常工作可能多少會遇到需要動態產生表單欄位的需求。舉例來說,像是訂單的問題,它的資料結構可能像是這樣: {OrderID:"A001", Items:[ {ItemName:"橡皮擦",Price:15,Quantity:10}, {ItemName:"鉛筆",Price:10,Quantity:10}, {ItemName:"筆記本",Price:25,Quantity:25} ]} 如果我們新增一筆Item,就需要動態的產生Item的DOM。其實在Angular要完成動態產生表單欄位這樣的需求,不管資料結構有多複雜,大致只需要用到 FormGroup、 FormArray、FormControl、ngFor、 track by 就能搞定了 !! 這裡我們將用訂單的例子,來示範使用 Reactive Form來動態產生表單欄位 1. 首先,我們使用FormGroup、 FormArray與FormControl將表單建立起來。 2. 為了能夠動態產生Items,對於欄位Items我們使用FormArray。 3. 建立AddItem、CreateItem,用於新增欄位。 4. 使用ngFor來產生出Items的DOM。 5. 利用trackBy ,減少DOM 更新次數,提升效能。 import { Component, OnInit } from '@angular/core'; import { FormGroup, FormControl, FormArray } from '@angular/forms'; @Component({ selector: 'app-reactive-form-sample', templateUrl: './reactive-form-sample