最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Angular實(shí)現(xiàn)響應(yīng)式表單

 更新時(shí)間:2017年08月04日 09:12:19   作者:1CSH1  
本篇文章主要介紹了Angular實(shí)現(xiàn)響應(yīng)式表單,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

介紹

Angular 總共提供了 3 中表單實(shí)現(xiàn)方式,分別是:Template-driven Forms (模板驅(qū)動(dòng)表單) 、 Reactive Forms (響應(yīng)式表單) Dynamic Forms (動(dòng)態(tài)表單) 。本文只介紹響應(yīng)式表單。

響應(yīng)式表單是什么呢?其實(shí)跟我們以前用 JQuery 或者其他框架實(shí)現(xiàn)的思路差不多,就是使用 HTML 顯示數(shù)據(jù),然后通過(guò)定義一定的校驗(yàn)器、校驗(yàn)規(guī)則以及校驗(yàn)提示語(yǔ),通過(guò)事件觸發(fā)校驗(yàn)后校驗(yàn)不通過(guò)的顯示提示語(yǔ),只不過(guò)用了 Angular,我們就使用 Angular 提供的語(yǔ)法來(lái)實(shí)現(xiàn)這個(gè)校驗(yàn)過(guò)程。

使用

接下來(lái)我們通過(guò)代碼例子來(lái)介紹如何使用響應(yīng)式表單。

引入響應(yīng)式表單模塊

在我們要使用響應(yīng)式表單的那個(gè)模塊里面引入響應(yīng)式表單模塊,比如我們?cè)谖恼履K中使用響應(yīng)式表單,我們就要在 imports 中添加 ReactiveFormsModule。代碼如下

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

編寫(xiě)校驗(yàn)器代碼

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

首先在 CommentComponent 中注入 FormBuilder 對(duì)象,并添加 commentForm 表單組以及創(chuàng)建一個(gè)評(píng)論對(duì)象 comment。

public commentForm: FormGroup;
public comment: Comment = new Comment();

constructor(private formBuilder: FormBuilder){}

定義校驗(yàn)器的提示語(yǔ) validationMessages, formErrors 是在模板中顯示的提示語(yǔ),提示語(yǔ)來(lái)自 validationMessages

public formErrors = {
 "nickname": "",
 "email": "",
 "content": "",
 "formError": ""
}

public validationMessages = {
 "nickname": {
 "required": "昵稱不能為空",
 },
 "email": {
 "required": "郵箱不能為空",
 "pattern": "請(qǐng)輸入正確的郵箱地址"
 },
 "content": {
 "required": "內(nèi)容不能為空"
 }
}

在組件啟動(dòng)的函數(shù)中構(gòu)造表單,這時(shí)候?yàn)槊總€(gè)字段添加了校驗(yàn)器,并且綁定在什么時(shí)候觸發(fā)校驗(yàn),這里我們?cè)诿總€(gè)值改變的時(shí)候觸發(fā)。

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() 方法實(shí)現(xiàn)了判斷是那個(gè)字段校驗(yàn)不通過(guò),然后將該字段的 validationMessages 提示語(yǔ)賦值給 formErrors,在模板那里有判斷如果 formErrors.email 等等字段不為空則顯示改內(nèi)容,也即是校驗(yàn)器的提示語(yǔ)

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 模板代碼

我們要關(guān)注的是 [formGroup]=”commentForm”、novalidate、formControlName=”nickname”、以及 *ngIf=”formErrors.nickname” 這幾個(gè)點(diǎn),并不是指具體的點(diǎn),而是著重看這些語(yǔ)法的每一個(gè)地方,在你自己實(shí)現(xiàn)的時(shí)候需要根據(jù)你的代碼修改的。

還有一個(gè)是 (ngSubmit)=”sendComment()” 定義了該表單點(diǎn)擊提交時(shí)調(diào)用的函數(shù)。

<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

效果圖


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談angular.copy() 深拷貝

    淺談angular.copy() 深拷貝

    本篇文章主要介紹了淺談angular.copy() 深拷貝,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • angular使用md5,CryptoJS des加密的方法

    angular使用md5,CryptoJS des加密的方法

    這篇文章主要介紹了angular使用md5,CryptoJS des加密的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • AngularJS 前臺(tái)分頁(yè)實(shí)現(xiàn)的示例代碼

    AngularJS 前臺(tái)分頁(yè)實(shí)現(xiàn)的示例代碼

    本篇文章主要介紹了AngularJS 前臺(tái)分頁(yè)實(shí)現(xiàn)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Angular Material Icon使用詳解

    Angular Material Icon使用詳解

    這篇文章主要介紹了Angular Material Icon使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 深入淺析AngularJS中的module(模塊)

    深入淺析AngularJS中的module(模塊)

    我們所說(shuō)的模塊,是你的AngularJS應(yīng)用程序的一個(gè)組成部分,它可以是一個(gè)Controller,也可以是一個(gè)Service服務(wù),也可以是一個(gè)過(guò)濾器(Filter),也可以是一個(gè)directive(指令)等等…都是屬于一個(gè)模塊,本文給大家介紹AngularJS中的module(模塊) ,感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • angularjs中控制視圖的控制器的兩種注入依賴項(xiàng)及服務(wù)的寫(xiě)法小結(jié)

    angularjs中控制視圖的控制器的兩種注入依賴項(xiàng)及服務(wù)的寫(xiě)法小結(jié)

    在AngularJS中,控制器的依賴注入有兩種方法:顯式依賴注入和隱匿依賴注入,顯式依賴注入通過(guò)使用字符串?dāng)?shù)組形式來(lái)注入依賴項(xiàng),本文給大家介紹angularjs中控制視圖的控制器的兩種注入依賴項(xiàng)及服務(wù)的寫(xiě)法,感興趣的朋友一起看看吧
    2024-09-09
  • 詳解angularJS動(dòng)態(tài)生成的頁(yè)面中ng-click無(wú)效解決辦法

    詳解angularJS動(dòng)態(tài)生成的頁(yè)面中ng-click無(wú)效解決辦法

    這篇文章主要介紹了詳解angularJS動(dòng)態(tài)生成的頁(yè)面中ng-click無(wú)效解決辦法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-06-06
  • angular6.0使用教程之父組件通過(guò)url傳遞id給子組件的方法

    angular6.0使用教程之父組件通過(guò)url傳遞id給子組件的方法

    這篇文章主要介紹了angular6.0使用教程之父組件通過(guò)url傳遞id給子組件的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn)

    詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn)

    本篇文章主要介紹了詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • angular4模塊中給標(biāo)簽添加背景圖的實(shí)現(xiàn)方法

    angular4模塊中給標(biāo)簽添加背景圖的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇angular4模塊中給標(biāo)簽添加背景圖的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論

杂多县| 龙州县| 延庆县| 中卫市| 枣阳市| 塔城市| 林口县| 黑河市| 开原市| 英山县| 贡觉县| 惠州市| 九龙坡区| 铜鼓县| 麻栗坡县| 翼城县| 宜兰县| 怀集县| 林周县| 鸡西市| 尚志市| 九台市| 日喀则市| 布尔津县| 卢龙县| 金秀| 芦溪县| 大余县| 旬阳县| 射洪县| 慈利县| 开原市| 龙门县| 宁蒗| 海安县| 青龙| 宁安市| 金溪县| 电白县| 合山市| 灵川县|