angular提供了兩種不一樣的方法來經過表單處理用戶輸入:響應式表單和模板驅動表單。兩者都從視圖中捕獲用戶輸入事件、驗證用戶輸入、建立表單模型、修改數據模型,並提供跟蹤這些更改的途徑。react
響應式表單和模板驅動表單在處理和管理表單和表單數據方面有所不一樣,各有優點。編程
響應式 | 模板驅動 | |
創建(表單模式) | 顯示,在組件類中建立 | 隱私,由組件建立 |
數據模式 | 結構化 | 非結構化 |
可預測性 | 同步 | 異步 |
表單驗證 | 函數 | 指令 |
可變性 | 不可變 | 可變 |
可伸縮性 | 訪問底層api | 在api之上抽象 |
兩者共享了一些底層構造塊:api
響應式表單和模板驅動表單都是用表單模型來跟蹤Angular表單和表單輸入元素以前值的變化。數組
下面是一個帶有輸入字段的組件,它使用響應式表單實現了單個控件。app
import { Component } from '@angular/core'; import { FormControl } from '@angular/forms'; @Component({ selector: 'app-reactive-favorite-color', template: ` Favorite Color: <input type="text" [formControl]="favoriteColorControl"> ` }) export class FavoriteColorComponent { favoriteColorControl = new FormControl(''); }
權威數據源負責提供在指定時間點上表單元素的值和狀態。在響應式表單中,表單模式充當權威數據源。上面代碼中的表單模型就是FormControl的實例。異步
reactive forms:響應式表單函數
form control instance:窗體控件實例測試
direct access to FormControl instance after link is created by FormControlDirective:在由FormControlDirective建立連接後直接訪問FormControl實例spa
在響應式表單中,表單模型是顯式定義在組件類中的。而後,響應式表單指令(這裏是FormControlDirective)會把這個現有的表單實例經過數據訪問器(ControlValueAccessories的實例)來指派給視圖中的表單元素。code
下面是一個帶有輸入字段的組件,使用模板驅動表單實現了單個控件。
import { Component } from '@angular/core'; @Component({ selector: 'app-template-favorite-color', template: ` Favorite Color: <input type="text" [(ngModel)]="favoriteColor"> ` }) export class FavoriteColorComponent { favoriteColor = ''; }
在模板驅動表單中,權威數據源是模板。
Can only access FormControl instance via NgModal directive:只能經過NgModal指令訪問FormControl實例
表單模型中的抽象促進告終構的簡化。模板驅動表單的NgModal指令負責建立和管理指定表單元素上的表單控件實例,它不那麼明顯,可是沒必要直接操縱表單模型。
在處理表單輸入時,兩種表單遵循兩種不一樣的策略。
驗證是任何表單必備的部分,Angular提供了一組內置的驗證器,並提供了建立自定義驗證器的功能。