Week 05 · Day 02 — Template-driven 表單:取值與驗證
學習目標
- 從表單取出使用者的輸入值
- 理解表單物件的
value/valid/invalid - 處理送出邏輯
重點
存參考並取值
<form #loginForm="ngForm" (ngSubmit)="onSubmit(loginForm)">
...
</form>
loginForm 是一個 NgForm,可取得:
onSubmit(form: NgForm): void {
console.log(form.value); // { email: "...", password: "..." }
console.log(form.valid); // boolean
}
form.value → 所有有 ngModel+name 欄位的值(物件)
另一種驗證存取
用 #email="ngModel" 抓單一控制:
<input type="email" name="email" ngModel required email #email="ngModel">
<div *ngIf="email.invalid && email.touched">
Email 欄位有錯誤
</div>
email.invalid:該欄位驗證失敗
- email.touched:使用者有碰過(避免一開始就紅字)
送出流程
1. (ngSubmit) 觸發 onSubmit
2. 若 form.invalid 可用 return 提早結束
3. 合法才處理資料
onSubmit(form: NgForm): void {
if (form.invalid) return;
console.log('Login with', form.value);
form.reset();
}
實作
- 實作
onSubmit印出form.value與form.valid - 加
#email="ngModel"顯示單欄錯誤訊息 - 送出合法資料後呼叫
form.reset()
作業
- 用
form.value取得輸入值 - 用
*ngIf="xxx.invalid && xxx.touched"顯示錯誤 - 實作送出邏輯並 reset