當在操作 Angular 表單時,於最後送出表單資料到 API 時,常見的使用方法為 formGroup.value
或是 formGroup.getRawValue()
兩種方法,關於 getRawValue()
大概也不用多贅述了。但你知道 FormGroup
的 value 取得資料的規則嗎 ?
FormGroup.value
一般來說,FormGroup
的 value 會將該群組下的控制項資料取出,如下
1 | formData1 = new FormGroup({ |
而第一個新手常會踩到的雷,會這遇到 FormControl
狀態是 Disabed
時,FormGroup
取出的值就不會是全部了
1 | formData1 = new FormGroup({ |
官方文件說明
For an enabled
FormGroup
, the values of enabled controls as an object with a key-value pair for each member of the group.
到這邊都還算正常,但你知道當 FormGroup
狀態為 Disabled
時,就會取出所有控制項的值嗎?
1 | formData1 = new FormGroup({ |
根據官網的說明
For a disabled
FormGroup
, the values of all controls as an object with a key-value pair for each member of the group.
但如果是這樣子的結構,會取得怎樣的值呢?
1 | formData1 = new FormGroup({ |
在第五行會顯示 {firstName: 'Kevin'}
,這是一件我剛開始也覺得很困惑的現象,為什麼明明 FormControl
是 disabled
的狀態,但為什麼還能取得呢?
原始碼解析
在 FormGroup
class 內有一個方法是在判斷目前 FormGroup
下的控制項是否全部為 Disabled
,如果是自己本身的狀態也會被設定為 Disabled
1 | _allControlsDisabled(): boolean { |
因為這一個關係,上面那一個問題就會使用 FormGroup
為 Disabled 時的規則運行