其實應該要在出現 Angular Material 篇章前才對,不過我漏掉了==
Angular當中有兩種表單管理方式:
表單管理方式 | 說明 |
---|---|
Template-driven forms |
非同步更新。 |
Reactive forms |
同步更新。 |
本文僅先介紹 Reactive forms
。
相關類別 | 說明 |
---|---|
AbstractControl | FormGroup , FormArray , FormControl 的抽象類別 |
FormArray | 追蹤某一個『表單群組下控制項』的【欄位值】與【驗證狀態】。 |
FormGroup | 追蹤某一個『表單控制項』的【欄位值】與【驗證狀態】。 |
FormControl | 追蹤『一群表單控制項』的【欄位值】與【驗證狀態】。 |
慣例的 imort module
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@NgModule({
imports: [
BrowserModule,
ReactiveFormsModule,
],
})
可以用各種結構來建立表單:
使用最小單位類別 FormControl
<!--XXX.component.html-->
<input type="text" [formControl]="firstName">
// XXX.component.ts
firstName = new FormControl("");
使用類別 FormGroup
FormGroup
什麼都可以包進去: FormControl
FormGroup
FormArray
<!--XXX.component.html-->
<form [formGroup]="_Form">
<input type="text" formControlName="firstName">
</form>
// XXX.component.ts
_Form: FormGroup = new FormGroup({
firstName: new FormControl(''),
emails: new FormArray([
new FormControl(''),
new FormControl('')
]),
});
透過 FormBuilder
元件
constructor(
private _FormBuilder: FormBuilder
) {}
_Form!: FormGroup;
this._Form = this._FormBuilder.group({
firstName: [''],
emails: this._FormBuilder.array([
this._FormBuilder.control(''),
this._FormBuilder.control('')
]),
});
this._Form.get('firstName')?.value;
this._Form.get('firstName')?.setValue('Cindy'); //會檢查 interface
this._Form.get('firstName')?.patchValue('Cindy');
this._Form.reset();
到時候連假再回來補充 Validation 驗證條件
Angular-表單(Form)-ReativeForm簡介
Angular 筆記 - form 表單基礎實作
【Ionic】Reactive Form 表單學習筆記