国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

Angular實現響應式表單

來源:懂視網 責編:小采 時間:2020-11-27 22:33:18
文檔

Angular實現響應式表單

Angular實現響應式表單:介紹 Angular 總共提供了 3 中表單實現方式,分別是:Template-driven Forms (模板驅動表單) 、 Reactive Forms (響應式表單) 、 Dynamic Forms (動態表單) 。本文只介紹響應式表單。 響應式表單是什么呢?其實跟我們以前用 JQuery 或者其他框
推薦度:
導讀Angular實現響應式表單:介紹 Angular 總共提供了 3 中表單實現方式,分別是:Template-driven Forms (模板驅動表單) 、 Reactive Forms (響應式表單) 、 Dynamic Forms (動態表單) 。本文只介紹響應式表單。 響應式表單是什么呢?其實跟我們以前用 JQuery 或者其他框

介紹

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

效果圖


聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Angular實現響應式表單

Angular實現響應式表單:介紹 Angular 總共提供了 3 中表單實現方式,分別是:Template-driven Forms (模板驅動表單) 、 Reactive Forms (響應式表單) 、 Dynamic Forms (動態表單) 。本文只介紹響應式表單。 響應式表單是什么呢?其實跟我們以前用 JQuery 或者其他框
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产精品电影一区二区 | 亚洲午夜久久久久久久久电影网 | 欧美精品午夜久久久伊人 | 九九精品成人免费国产片 | 免费看特级淫片日本 | 亚洲国产视频网 | 国产a国产片 | 欧美在线一二三区 | 精品一区二区三区四区电影 | 欧美网址在线观看 | 亚洲三级电影网 | 在线观看国产黄色 | 亚洲国产激情 | 成人特黄午夜性a一级毛片 成人国产一区二区三区精品 | 欧洲欧美成人免费大片 | 欧美日韩成人高清色视频 | 国产在线不卡视频 | 亚洲国产精品综合久久一线 | 国产精品久久一区一区 | 欧美亚洲综合图区在线 | 一区二区三区免费在线观看 | 亚洲国产精久久久久久久 | 老司机精品视频一区二区 | 2021国产精品自拍 | 亚洲 欧美 日韩 在线 | 国产欧美日韩亚洲 | 一久久| 国产全黄a一级毛片 | 国产精品系列在线观看 | 欧美综合亚洲图片综合区 | 国产精品福利久久久久久小说 | 91在线一区二区 | 日本不卡视频一区二区三区 | 亚洲国产精品二区久久 | 欧美一区二区二区 | 亚洲第一视频网站 | 小处雏高清一区二区三区 | 日韩精品一区二区三区毛片 | 欧美久久久久久久一区二区三区 | 日韩第三页 | 美女视频黄a视频全免费应用 |