在app.module中導入FormsModule以後,項目中的form表單都會是一個ngForm,也就是一個模板表單。html
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from "@angular/forms"; @NgModule({ imports: [ CommonModule, FormsModule ], exports: [], declarations: [] }) export class AppModule { }
在表單上添加的ngForm
會攔截標準的hmlt表單提交事件。json
ngmodel
屬性,這表明着建立了一個FormControl
控件。form
中,Form
會自動將該FormControl
控件註冊爲Form
的子控件。只有表單元素上在添加了ngModel
的基礎上再添加name
屬性,纔會將name=「nickname」
的字段添加至表單控件上。<form #myForm="ngForm"> <input ngModel name="nickname" type="text"> </form> {{myForm.value | json}} //這裏將以{{"nickname": xxx}}輸出input輸入框中的內容
單向數據綁定數組
具體使用`[ngModel]="xxx"`
雙向數據綁定app
具體使用`[(ngModel)]="xxx"`
簡單來講,是一組 FormControlangular4
AbstractControl
是三個具體表單類的抽象基類。 併爲它們提供了一些共同的行爲和屬性,其中有些是可觀察對象(Observable
)。FormControl
用於跟蹤一個單獨的表單控件的值和有效性狀態。它對應於一個HTML
表單控件,好比輸入框和下拉框。FormGroup用於
跟蹤一組AbstractControl
的實例的值和有效性狀態。 該組的屬性中包含了它的子控件。 組件中的頂級表單就是一個FormGroup。FormArray
用於跟蹤AbstractControl
實例組成的有序數組的值和有效性狀態。在使用響應式表單以前,也須要在app.module中添加import。ui
import {ReactiveFormsModule} from "@angular/forms"; @NgModule({ // 省略其餘 imports: [..., ReactiveFormsModule], // 省略其餘 }) // 省略其餘
form
中的value
直接綁定在html中的標籤上,而是隻是簡單地聲明瞭一下formControlName
,再在component
上將對應的formControlName
的表單元素實例化FormControl
ngOnInit() { // 初始化表單 this.user = new FormGroup({ email: new FormControl('', [Validators.required, Validators.pattern(/([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,4}/)]), password: new FormControl('', [Validators.required]), repeat: new FormControl('', [Validators.required]), address: new FormGroup({ province: new FormControl(''), city: new FormControl(''), area: new FormControl(''), addr: new FormControl('') }) }); }
FormBuilder
的存在就是爲了可以快速構建表單。具體使用形式:this
constructor(private fb: FormBuilder) {} ngOnInit() { // 初始化表單 this.user = this.fb.group({ email: ['', [Validators.required, Validators.email]], password: ['', Validators.required], repeat: ['', Validators.required], address: this.fb.group({ province: [], city: [], area: [], addr: [] }) }); }
目前Angular支持的內置validate屬性:code
required
- 設置表單控件值是非空的email
- 設置表單控件的格式是emailminlength
- 設置表單控件值的最小長度maxlength
- 設置表單控件長度的最大值pattern
- 設置表單控件的值需匹配 pattern 對應的模式經過表單控件的.valid
判斷驗證結果,其結果狀態:component
valid
- 有效invalid
- 無效pristine
- 表單值未改變dirty
- 表單值已改變touched
- 表單控件已被訪問過untouched
- 表單控件未被訪問過html
中編寫驗證信息,經過設置[hidden]="!formModel.hasError('驗證結果')"
屬性來顯示。component
中的fomModel
上添加{validator: xxxValidat0or}
,再在指定的xxxValidator
驗證方法中調用description
來顯示驗證失敗信息。{password: {description: "密碼和確認密碼不匹配"}}
能夠經過如下類選擇器添加相應的樣式:orm
.ng-valid
.ng-invalid
.ng-pristine
.ng-dirty
.touched
.untouched