亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Angular實現響應式表單

2019-11-19 15:54:19
字體:
來源:轉載
供稿:網友

介紹

Angular 總共提供了 3 中表單實現方式,分別是:Template-driven Forms (模板驅動表單) Reactive Forms (響應式表單) 、 Dynamic Forms (動態表單) 。本文只介紹響應式表單。

響應式表單是什么呢?其實跟我們以前用 JQuery 或者其他框架實現的思路差不多,就是使用 HTML 顯示數據,然后通過定義一定的校驗器、校驗規則以及校驗提示語,通過事件觸發校驗后校驗不通過的顯示提示語,只不過用了 Angular,我們就使用 Angular 提供的語法來實現這個校驗過程。

使用

接下來我們通過代碼例子來介紹如何使用響應式表單。

引入響應式表單模塊

在我們要使用響應式表單的那個模塊里面引入響應式表單模塊,比如我們在文章模塊中使用響應式表單,我們就要在 imports 中添加 ReactiveFormsModule。代碼如下

@NgModule({ imports: [ RouterModule, RouterModule.forChild(articleRoutes), SharedModule, ReactiveFormsModule, NgbModule.forRoot() ], declarations: [ HomeComponent, DetailComponent, CommentComponent, CommentViewComponent ], providers: [ HomeService, DetailService, CommentService ]})export class ArticleModule { }

編寫校驗器代碼

首先我們這里的表單有 3 個字段,分別是 nickname、email、content; nickname 添加必填校驗器,email 添加必填和郵箱格式校驗器,content添加必填校驗器。

首先在 CommentComponent 中注入 FormBuilder 對象,并添加 commentForm 表單組以及創建一個評論對象 comment。

public commentForm: FormGroup;public comment: Comment = new Comment();constructor(private formBuilder: FormBuilder){}

定義校驗器的提示語 validationMessages, formErrors 是在模板中顯示的提示語,提示語來自 validationMessages

public formErrors = { "nickname": "", "email": "", "content": "", "formError": ""}public validationMessages = { "nickname": { "required": "昵稱不能為空", }, "email": { "required": "郵箱不能為空", "pattern": "請輸入正確的郵箱地址" }, "content": { "required": "內容不能為空" }}

在組件啟動的函數中構造表單,這時候為每個字段添加了校驗器,并且綁定在什么時候觸發校驗,這里我們在每個值改變的時候觸發。

ngOnInit(): void { this.buildForm();}private buildForm() { this.commentForm = this.formBuilder.group({ "nickname":[  this.comment.nickname,  [  Validators.required  ] ], "email": [  this.comment.email,  [  Validators.required,  Validators.pattern("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((/.[a-zA-Z0-9_-]{2,3}){1,2})$")  ] ], "content": [  this.comment.content,  [  Validators.required  ] ] }); this.commentForm.valueChanges.subscribe(data => this.onValueChanged(data)); this.onValueChanged();}

onValueChanged() 方法實現了判斷是那個字段校驗不通過,然后將該字段的 validationMessages 提示語賦值給 formErrors,在模板那里有判斷如果 formErrors.email 等等字段不為空則顯示改內容,也即是校驗器的提示語

onValueChanged(data?: any) { if (!this.commentForm) { return; } const form = this.commentForm; for (const field in this.formErrors) { this.formErrors[field] = ''; const control = form.get(field); if (control && control.dirty && !control.valid) {  const messages = this.validationMessages[field];  for (const key in control.errors) {  this.formErrors[field] += messages[key] + ' ';  } } }}

HTML 模板代碼

我們要關注的是 [formGroup]=”commentForm”、novalidate、formControlName=”nickname”、以及 *ngIf=”formErrors.nickname” 這幾個點,并不是指具體的點,而是著重看這些語法的每一個地方,在你自己實現的時候需要根據你的代碼修改的。

還有一個是 (ngSubmit)=”sendComment()” 定義了該表單點擊提交時調用的函數。

<form [formGroup]="commentForm" (ngSubmit)="sendComment()" role="form" novalidate> <div class="control-group"> <div class="form-group floating-label-form-group controls" [ngClass]="{'has-error': formErrors.nickname}">  <label>{{ 'comment.nickname' | translate }}</label>  <input formControlName="nickname" type="text" class="form-control" placeholder="{{ 'comment.nickname' | translate }}">  <p *ngIf="formErrors.nickname" class="help-block text-danger">  {{ formErrors.nickname }}  </p> </div> </div> <div class="control-group" > <div class="form-group floating-label-form-group controls" [ngClass]="{'has-error': formErrors.email}">  <label>{{ 'comment.email' | translate }}</label>  <input formControlName="email" type="email" class="form-control" placeholder="{{ 'comment.email' | translate }}">  <p *ngIf="formErrors.email" class="help-block text-danger">  {{ formErrors.email }}  </p> </div> </div> <div class="control-group"> <div class="form-group floating-label-form-group controls" [ngClass]="{'has-error': formErrors.content}">  <label>{{ 'comment.content' | translate }}</label>  <textarea formControlName="content" rows="5" class="form-control" placeholder="{{ 'comment.content' | translate }}"></textarea>  <p *ngIf="formErrors.content" class="help-block text-danger">  {{ formErrors.content }}  </p> </div> </div> <p *ngIf="formErrors.formError" class="help-block text-danger"> {{ formErrors.formError }} </p> <br> <div id="success"></div> <div class="form-group"> <button [disabled]="commentForm.invalid" type="submit" class="btn btn-secondary" >{{ 'comment.submit' | translate }}</button> </div></form>

GitHub 代碼

參考文章

Reactive Forms

效果圖


以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人av资源在线播放| 欧美性视频网站| 成人女保姆的销魂服务| 久久国产精品网站| 中文字幕免费精品一区高清| 国产成人+综合亚洲+天堂| 午夜精品www| 亚洲欧洲在线免费| 欧美在线视频一区| 亚洲爱爱爱爱爱| 成人免费看片视频| 国产精品免费一区| 欧美精品少妇videofree| 久久久久久久久久久免费| 国产精品视频26uuu| 亚洲免费视频网站| 欧洲永久精品大片ww免费漫画| 亚洲午夜未满十八勿入免费观看全集| 亚洲护士老师的毛茸茸最新章节| zzijzzij亚洲日本成熟少妇| 国产剧情久久久久久| 欧美精品午夜视频| 欧美国产在线视频| 日韩一区视频在线| 精品女同一区二区三区在线播放| 亚洲丝袜av一区| 成人免费直播live| 亚洲女人天堂色在线7777| 欧美性猛交xxxx黑人猛交| 亚洲桃花岛网站| 国产精品福利在线观看| 国产精品美女视频网站| 国产亚洲精品一区二区| 久久久久国产一区二区三区| 成人免费在线网址| 欧美视频免费在线观看| 精品久久久久久中文字幕| 精品亚洲国产成av人片传媒| 一本一道久久a久久精品逆3p| 欧美国产精品va在线观看| 欧美孕妇孕交黑巨大网站| 国产色综合天天综合网| 亚洲天堂影视av| 韩国三级日本三级少妇99| 亚洲女人初尝黑人巨大| 亚洲2020天天堂在线观看| 日本欧美中文字幕| 久久久噜噜噜久久中文字免| 午夜精品一区二区三区在线播放| 国产精品99久久久久久白浆小说| 国产狼人综合免费视频| 国产99久久精品一区二区永久免费| zzjj国产精品一区二区| 欧美性生交xxxxx久久久| 亚洲香蕉伊综合在人在线视看| 国产精品都在这里| 色香阁99久久精品久久久| 91亚洲va在线va天堂va国| 精品久久久视频| 亚洲欧美综合区自拍另类| 性欧美xxxx视频在线观看| 亚洲成人av在线| 亚洲国产日韩欧美在线图片| 亚洲欧美色婷婷| 久久精品亚洲精品| 国产在线播放91| 国产一区二区在线播放| 精品国产91乱高清在线观看| 国产一区二区动漫| 久久综合久久88| 国产亚洲欧美日韩一区二区| 欧美精品videofree1080p| 亚洲午夜未删减在线观看| 久久99亚洲热视| 日韩av在线免费观看| 日韩欧美亚洲综合| 国产精品入口福利| 国产精品亚发布| 韩日精品中文字幕| 亚洲国产精品久久久久秋霞蜜臀| 欧美大片免费观看在线观看网站推荐| 亚洲最大av在线| 欧美国产在线电影| 精品视频在线播放免| 国产极品jizzhd欧美| 黑人与娇小精品av专区| 亚洲精品有码在线| 国产精品日韩在线| 亚洲高清久久久久久| 日韩欧美国产免费播放| 久久久99免费视频| 91久久精品国产| 欧美成人剧情片在线观看| 日日狠狠久久偷偷四色综合免费| 欧美激情第1页| 欧美日韩成人在线观看| 丝袜亚洲另类欧美重口| 成人精品在线观看| 成人在线精品视频| 日韩欧美在线免费观看| 中文字幕9999| 热久久免费视频精品| 欧美激情第一页xxx| 中文字幕日韩av| 久久夜色精品亚洲噜噜国产mv| 亚洲精品国产精品国自产观看浪潮| 亚洲成人av资源网| 精品视频在线导航| 97国产成人精品视频| 欧美电影在线免费观看网站| 欧美色视频日本高清在线观看| 91精品视频免费观看| 亚洲国产私拍精品国模在线观看| 日韩欧美国产成人| 精品少妇一区二区30p| 国产欧美韩国高清| 精品中文字幕在线2019| 国产91精品最新在线播放| 国产精品日韩一区| 国模私拍视频一区| 欧美性极品xxxx娇小| 国产成人在线一区二区| 2023亚洲男人天堂| 亚洲精品自拍偷拍| 欧美日韩国产在线看| 91久久久精品| 久久久久这里只有精品| 亚洲人成在线观| 日韩动漫免费观看电视剧高清| 欧美成人在线免费视频| 国产精品久久综合av爱欲tv| 91久久精品美女高潮| 97国产精品人人爽人人做| 久久午夜a级毛片| 欧美日韩国产中字| 国产日韩在线观看av| 亚洲的天堂在线中文字幕| 久久久欧美精品| 日韩在线观看电影| 久久91精品国产91久久久| 欧美精品日韩三级| 日韩av免费在线观看| 欧美xxxx14xxxxx性爽| 免费av在线一区| 91夜夜揉人人捏人人添红杏| 欧美另类极品videosbest最新版本| 亚洲欧美精品一区| 久久6免费高清热精品| 91影视免费在线观看| 91精品久久久久久久久不口人| 91久久国产精品91久久性色| 日韩av在线资源| 亚洲欧美日韩国产中文专区| 岛国av午夜精品| 在线精品国产欧美| 性亚洲最疯狂xxxx高清| 日本精品一区二区三区在线播放视频| 久久伊人免费视频| 亚洲人成五月天| 成人精品视频在线| 国产成人高潮免费观看精品| 伊人久久大香线蕉av一区二区| 另类视频在线观看| 久久久久成人精品|