Angular表單驗證

注冊響應(yīng)式表單模塊

要使用響應(yīng)式表單控件渐排,就要在app.module.ts文件中勉吻,從 @angular/forms 包中導(dǎo)入 [ReactiveFormsModule](https://angular.cn/api/forms/ReactiveFormsModule),并把它添加到你的 NgModule 的 imports 數(shù)組中。

1、組件中引入import { FormControl,FormBuilder,FormGroup, Validators } from '@angular/forms';表單驗證模塊(FormGroup:表單驗證組內(nèi)部有FormControl又谋,F(xiàn)ormBuilder:ts中使用其創(chuàng)建表單對象拼缝,Validators:Angular內(nèi)含的驗證模塊)
2、在頁面中創(chuàng)建表單組件彰亥,表單綁定[formGroup]='form'屬性咧七;在ts中定義public form!:FormGroup。同時在html頁面中需要驗證的表單元素中綁定formControlName='username'

<input nz-input type="text" formControlName='username' required placeholder="用戶名">
<input nz-input type="text" formControlName='password' placeholder="密碼">

3剩愧、聲明表單初始化函數(shù)(兩種方法)猪叙,在組件的初始化生命周期中進行調(diào)用

 //初始化表單
  initform(){
    //使用構(gòu)造函數(shù)方法創(chuàng)建表單對象
    // this.form=new FormGroup({
    //   username:new FormControl('',[Validators.required]),
    //   password:new FormControl('',[Validators.required])
    // })
    //使用FormBuilder模塊中的group方法創(chuàng)建表單對象
    this.form=this.FormBuilder.group({
      username:['',[Validators.required,Validators.maxLength(8)]],
      password:['',Validators.required]
    })
  }

4、使用get方法獲取兩個表單項,方便后面對頁面中對提示函數(shù)的書寫不用多次獲取表單的項目

public get username() {
    return this.form.get('username')
  }
  public get password() {
    return this.form.get('password')
  }

5仁卷、定義表單驗證不通過提示函數(shù)

 getErrorMsg(name:any){
    switch (name) {
      case 'username':
          return this.username?.errors?.required?'用戶名必填':
                this.username?.errors?.maxlength?'用戶名不能超過8位':
                '';
        break;
      case 'password':
        return this.password?.errors?.required?'密碼必填':'';
        break;
      default:
          return false
        break;
    }
  }

6穴翩、在頁面中想要顯示提示錯誤的地方引用

//username項驗證不通過提示
<div [ngStyle]="{'color':'red'}">{{getErrorMsg('username')}}</div>
//password項驗證不通過提示
<div [ngStyle]="{'color':'red'}">{{getErrorMsg('password')}}</div>

7、在表單提交事件中對表單驗證是否通過進行判斷锦积,是否提交表單

 functionName(){    
    if (this.form.valid) {
    //通過驗證芒帕,使用this.form.value獲取表單提交的值
      console.log(this.form.value);
    }else{
    //未通過驗證,調(diào)用內(nèi)置的提示模塊給出提示
      for (const i in this.validateForm.controls) {
        if (this.validateForm.controls.hasOwnProperty(i)) {
          this.validateForm.controls[i].markAsDirty();
          this.validateForm.controls[i].updateValueAndValidity();
        }
      }
    }
  }

以下為具體代碼
//html
<form  (ngSubmit)="functionName()" [formGroup]='form'>
    <div>
        <input nz-input type="text" formControlName='username' required placeholder="用戶名">
        <div [ngStyle]="{'color':'red'}">{{getErrorMsg('username')}}</div>
    </div>
    <div>
        <input nz-input type="text" formControlName='password' placeholder="密碼">
        <div [ngStyle]="{'color':'red'}">{{getErrorMsg('password')}}</div>
    </div>
    <button type="submit">提交</button>
</form>
//ts
import { Component, OnInit } from '@angular/core';
import { FormControl,FormBuilder,FormGroup, Validators } from '@angular/forms';

@Component({
  selector: 'app-form-valid',
  templateUrl: './form-valid.component.html',
  styleUrls: ['./form-valid.component.scss']
})
export class FormValidComponent implements OnInit {
  public form!:FormGroup
  constructor(private FormBuilder:FormBuilder) { }
  //表單提交
  functionName(){    
    if (this.form.valid) {
    //通過驗證丰介,使用this.form.value獲取表單提交的值
      console.log(this.form.value);
    }else{
       //未通過驗證背蟆,調(diào)用內(nèi)置的提示模塊給出提示
      for (const i in this.validateForm.controls) {
        if (this.validateForm.controls.hasOwnProperty(i)) {
          this.validateForm.controls[i].markAsDirty();
          this.validateForm.controls[i].updateValueAndValidity();
        }
      }
    }
  }
  public get username() {
    return this.form.get('username')
  }
  public get password() {
    return this.form.get('password')
  }
  getErrorMsg(name:any){
    switch (name) {
      case 'username':
          return this.username?.errors?.required?'用戶名必填':
                this.username?.errors?.maxlength?'用戶名不能超過8位':
                '';
        break;
      case 'password':
        return this.password?.errors?.required?'密碼必填':'';
        break;
      default:
          return false
        break;
    }
  }
  //初始化表單
  initform(){
    // this.form=new FormGroup({
    //   username:new FormControl('',[Validators.required]),
    //   password:new FormControl('',[Validators.required])
    // })
    this.form=this.FormBuilder.group({
      username:['',[Validators.required,Validators.maxLength(8)]],
      password:['',Validators.required]
    })
  }
  ngOnInit(): void {
    this.initform()
    
  }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哮幢,隨后出現(xiàn)的幾起案子带膀,更是在濱河造成了極大的恐慌,老刑警劉巖橙垢,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垛叨,死亡現(xiàn)場離奇詭異,居然都是意外死亡柜某,警方通過查閱死者的電腦和手機嗽元,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喂击,“玉大人剂癌,你說我怎么就攤上這事『舶恚” “怎么了佩谷?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長监嗜。 經(jīng)常有香客問我琳要,道長,這世上最難降的妖魔是什么秤茅? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮童叠,結(jié)果婚禮上框喳,老公的妹妹穿的比我還像新娘课幕。我一直安慰自己,他們只是感情好五垮,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布乍惊。 她就那樣靜靜地躺著,像睡著了一般放仗。 火紅的嫁衣襯著肌膚如雪润绎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天诞挨,我揣著相機與錄音莉撇,去河邊找鬼。 笑死惶傻,一個胖子當著我的面吹牛棍郎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播银室,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼涂佃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜈敢?” 一聲冷哼從身側(cè)響起辜荠,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抓狭,沒想到半個月后伯病,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡辐宾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年狱从,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叠纹。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡季研,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出誉察,到底是詐尸還是另有隱情与涡,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布持偏,位于F島的核電站驼卖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鸿秆。R本人自食惡果不足惜酌畜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卿叽。 院中可真熱鬧桥胞,春花似錦恳守、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缎罢,卻和暖如春伊群,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背策精。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工舰始, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛮寂。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓蔽午,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酬蹋。 傳聞我的和親對象是個殘疾皇子及老,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Angular 支持非常強大的內(nèi)置表單驗證,maxlength范抓、minlength骄恶、required 以及 pat...
    sunny_lvy閱讀 19,948評論 3 25
  • 模板式表單驗證(1) angular遇到form自動接管,不想自動接管匕垫,添加ngNoForm,當標簽為div時僧鲁,但...
    nzjcnjzx閱讀 443評論 0 0
  • angular的表單驗證由驗證器Validators模塊提供,所以如果你的表單需要驗證就要將此模塊引入 一象泵、想使用...
    _花閱讀 4,731評論 0 2
  • >用戶輸入 通過$event對象取得用戶輸入 $event的類型 $event的類型現(xiàn)在是KeyboardEven...
    Sun____閱讀 303評論 0 0
  • 首先介紹下自己的背景: 我11年左右入市到現(xiàn)在偶惠,也差不多有4年時間春寿,看過一些關(guān)于股票投資的書籍,對于巴菲特等股神的...
    瞎投資閱讀 5,698評論 3 8