摘要:在表單上添加的會(huì)攔截標(biāo)準(zhǔn)的表單提交事件。并為它們提供了一些共同的行為和屬性,其中有些是可觀察對(duì)象。用于跟蹤一個(gè)多帶帶的表單控件的值和有效性狀態(tài)。組件中的頂級(jí)表單就是一個(gè)。在表單所在的中的上添加,再在指定的驗(yàn)證方法中調(diào)用來(lái)顯示驗(yàn)證失敗信息。
angular4 表單 模板表單
在app.module中導(dǎo)入FormsModule之后,項(xiàng)目中的form表單都會(huì)是一個(gè)ngForm,也就是一個(gè)模板表單。
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會(huì)攔截標(biāo)準(zhǔn)的hmlt表單提交事件。
ngModel和FormControl在表單元素中添加了ngmodel屬性,這代表著創(chuàng)建了一個(gè)FormControl控件。
將第一步中的控件放至form中,Form會(huì)自動(dòng)將該FormControl控件注冊(cè)為Form的子控件。只有表單元素上在添加了ngModel的基礎(chǔ)上再添加name屬性,才會(huì)將name=“nickname”的字段添加至表單控件上。
例:
{{myForm.value | json}} //這里將以{{"nickname": xxx}}輸出input輸入框中的內(nèi)容
單向數(shù)據(jù)綁定
具體使用`[ngModel]="xxx"`
雙向數(shù)據(jù)綁定
具體使用`[(ngModel)]="xxx"`ngModelGroup
簡(jiǎn)單來(lái)說(shuō),是一組 FormControl
響應(yīng)式表單 響應(yīng)式表單中一些常用的類(lèi)AbstractControl是三個(gè)具體表單類(lèi)的抽象基類(lèi)。 并為它們提供了一些共同的行為和屬性,其中有些是可觀察對(duì)象(Observable)。
FormControl 用于跟蹤一個(gè)多帶帶的表單控件的值和有效性狀態(tài)。它對(duì)應(yīng)于一個(gè)HTML表單控件,比如輸入框和下拉框。
FormGroup用于 跟蹤一組AbstractControl的實(shí)例的值和有效性狀態(tài)。 該組的屬性中包含了它的子控件。 組件中的頂級(jí)表單就是一個(gè)FormGroup。
FormArray用于跟蹤AbstractControl實(shí)例組成的有序數(shù)組的值和有效性狀態(tài)。
具體使用在使用響應(yīng)式表單之前,也需要在app.module中添加import。
import {ReactiveFormsModule} from "@angular/forms"; @NgModule({ // 省略其他 imports: [..., ReactiveFormsModule], // 省略其他 }) // 省略其他區(qū)別:響應(yīng)式表單與模板表單最大的區(qū)別在于響應(yīng)式表單并不是直接地將form中的value直接綁定在html中的標(biāo)簽上,而是只是簡(jiǎn)單地聲明了一下formControlName,再在component上將對(duì)應(yīng)的formControlName的表單元素實(shí)例化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("") }) }); }FomBuilder
FormBuilder的存在就是為了能夠快速構(gòu)建表單。具體使用形式:
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: [] }) }); }表單驗(yàn)證
目前Angular支持的內(nèi)置validate屬性:
required - 設(shè)置表單控件值是非空的
email - 設(shè)置表單控件的格式是email
minlength - 設(shè)置表單控件值的最小長(zhǎng)度
maxlength - 設(shè)置表單控件長(zhǎng)度的最大值
pattern - 設(shè)置表單控件的值需匹配 pattern 對(duì)應(yīng)的模式
如何判斷驗(yàn)證的結(jié)果通過(guò)表單控件的.valid判斷驗(yàn)證結(jié)果,其結(jié)果狀態(tài):
valid - 有效
invalid - 無(wú)效
pristine - 表單值未改變
dirty - 表單值已改變
touched - 表單控件已被訪問(wèn)過(guò)
untouched - 表單控件未被訪問(wèn)過(guò)
如果顯示驗(yàn)證失敗的信息可以直接在html中編寫(xiě)驗(yàn)證信息,通過(guò)設(shè)置[hidden]="!formModel.hasError("驗(yàn)證結(jié)果")"屬性來(lái)顯示。
在表單所在的component中的fomModel上添加{validator: xxxValidat0or},再在指定的xxxValidator驗(yàn)證方法中調(diào)用description來(lái)顯示驗(yàn)證失敗信息。
例:{password: {description: "密碼和確認(rèn)密碼不匹配"}}
可以通過(guò)以下類(lèi)選擇器添加相應(yīng)的樣式:
.ng-valid
.ng-invalid
.ng-pristine
.ng-dirty
.touched
.untouched
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/88688.html
摘要:在引起狀態(tài)變化的時(shí)刻,框架自動(dòng)觸發(fā)臟檢查,也可以手動(dòng)執(zhí)行臟檢查,直接操作更新視圖。最后,說(shuō)了這么多,大家在具體選型時(shí)還是要首先分析自己的需求和現(xiàn)狀,然后再做選擇。 作為一個(gè)軟件開(kāi)發(fā)者,最大的挑戰(zhàn)就是在不斷涌現(xiàn)的新技術(shù)中進(jìn)行取舍,持續(xù)學(xué)習(xí)是從事這一行業(yè)的必備技能。在這個(gè)領(lǐng)域里,技術(shù)更新最快地又非前端莫屬了。各種框架的出現(xiàn)、版本的更新此起彼伏,呈現(xiàn)出一派欣欣向榮之景。 在項(xiàng)目中必不可少的便...
摘要:在引起狀態(tài)變化的時(shí)刻,框架自動(dòng)觸發(fā)臟檢查,也可以手動(dòng)執(zhí)行臟檢查,直接操作更新視圖。最后,說(shuō)了這么多,大家在具體選型時(shí)還是要首先分析自己的需求和現(xiàn)狀,然后再做選擇。 作為一個(gè)軟件開(kāi)發(fā)者,最大的挑戰(zhàn)就是在不斷涌現(xiàn)的新技術(shù)中進(jìn)行取舍,持續(xù)學(xué)習(xí)是從事這一行業(yè)的必備技能。在這個(gè)領(lǐng)域里,技術(shù)更新最快地又非前端莫屬了。各種框架的出現(xiàn)、版本的更新此起彼伏,呈現(xiàn)出一派欣欣向榮之景。 在項(xiàng)目中必不可少的便...
摘要:在引起狀態(tài)變化的時(shí)刻,框架自動(dòng)觸發(fā)臟檢查,也可以手動(dòng)執(zhí)行臟檢查,直接操作更新視圖。最后,說(shuō)了這么多,大家在具體選型時(shí)還是要首先分析自己的需求和現(xiàn)狀,然后再做選擇。 作為一個(gè)軟件開(kāi)發(fā)者,最大的挑戰(zhàn)就是在不斷涌現(xiàn)的新技術(shù)中進(jìn)行取舍,持續(xù)學(xué)習(xí)是從事這一行業(yè)的必備技能。在這個(gè)領(lǐng)域里,技術(shù)更新最快地又非前端莫屬了。各種框架的出現(xiàn)、版本的更新此起彼伏,呈現(xiàn)出一派欣欣向榮之景。 在項(xiàng)目中必不可少的便...
摘要:好了,廢話少說(shuō),繼續(xù)吧這一章主要講利用控制用戶(hù)登錄。在前面的用戶(hù)注冊(cè)表單中使用了的響應(yīng)式表單。在構(gòu)造函數(shù)中聲明了一個(gè)對(duì)象一個(gè)對(duì)象和對(duì)象對(duì)象。并在構(gòu)造函數(shù)中用的方法更新了網(wǎng)頁(yè)的標(biāo)題。接下來(lái)導(dǎo)航到下一個(gè)頁(yè)面,并提示用戶(hù)登錄成功。 最近工作比較忙,一直沒(méi)有更新文章。原來(lái)看別人的文章感覺(jué)很過(guò)癮,現(xiàn)在自己寫(xiě)才發(fā)現(xiàn),要堅(jiān)持下去真的很難。好了,廢話少說(shuō),繼續(xù)吧!這一章主要講利用angularJs控制...
閱讀 1820·2021-11-23 09:51
閱讀 927·2021-10-08 10:05
閱讀 3421·2021-09-26 09:55
閱讀 1030·2021-09-22 15:21
閱讀 1626·2021-09-09 09:33
閱讀 1235·2019-08-30 15:56
閱讀 1275·2019-08-30 15:55
閱讀 958·2019-08-30 13:19