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

angular 表單驗證器驗證的同時限制輸入的實現(xiàn)

 更新時間:2019年04月11日 09:18:14   作者:TonyStudio  
表單驗證是經(jīng)常用到一個東西,這篇文章主要介紹了angular 表單驗證器驗證的同時限制輸入的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下

angular里面對于表單驗證,設(shè)置了很多指令。

也就是說不用自己寫一些邏輯,直接綁定指令就行。

ng-app     啟動你angular的模塊

 ng-controller 控制器,啟動你angualr里面的邏輯代碼作用在頁面上

ng-options  循環(huán)你select里面的option標簽,很好用的

 ng-submit,表單提交執(zhí)行的

novalidate  表單form配合后期檢測的

ng-model  實現(xiàn)雙數(shù)據(jù)綁定

ng-show 根據(jù)一定的邏輯實現(xiàn)顯示

ng-cloak 綁定在節(jié)點上,防止節(jié)點渲染,angular指令閃爍

ng-class class類名根據(jù)你的邏輯,出現(xiàn)

ng-required 檢測你的input為不為空

ng-pattern 正則表達式,綁定在input上面限制輸入規(guī)范

ng-maxlength 最多輸入限制

ng-minlength 最少輸入限制

ng-disabled="myForm.$invalid" 臟檢測

大概就需要這些指令了,大家不要噴我。謝謝

仔細回想以前使用響應(yīng)式表單的驗證器的時候,只是驗證輸入的值是否非法,而沒有做對應(yīng)的限制輸入,比如當輸入一串金額的時候只能輸入數(shù)字,有這種需求的時候,我們該怎么做限制輸入?用input來監(jiān)聽?用onModelChange來監(jiān)聽?我們可以直接寫在驗證器里面。

表單的驗證分為模板驅(qū)動驗證和響應(yīng)式表單的驗證,響應(yīng)式表單添加自定義驗證器非常方便,所以我們來直接以響應(yīng)式表單的驗證為研究基礎(chǔ)。

首先構(gòu)造基本的表單:

<form nz-form [formGroup]="validateForm">
 <nz-form-item>
  <nz-form-label [nzSpan]="6" nzFor="code">GA Code</nz-form-label>
  <nz-form-control [nzSpan]="14">
   <input nz-input name="code" formControlName="code" id="code">
  </nz-form-control>
 </nz-form-item >
</form>
validateForm: FormGroup;
constructor(
  private fb: FormBuilder,
) {
}
ngOnInit() {
  this.validateForm = this.fb.group({
    code: [33, [Validators.required, Validators.maxLength(6)]],
  });
}

我們創(chuàng)建的這個響應(yīng)式表單是要驗證一個谷歌驗證的「code」字段,并給與了兩個驗證器,一個必填驗證,一個驗證長度最長是6位。運行起來后,我們輸入的如果超過6位范圍輸入框就會變成紅色,這是OK的。

現(xiàn)在我們需要在驗證的同時限制輸入,比如只讓用戶輸入數(shù)字,其他的一切都不可輸入。

創(chuàng)建驗證器,在驗證的同時,限制輸入

我們使用正則表達式來判斷。首先,判斷一個字符串是否是全數(shù)字:/^\d*$/.test(value)。然后將有「雜質(zhì)」的字符串修正為純數(shù)字:value.replace(/[^0-9]/ig, '')。

思路是,創(chuàng)建驗證器,當有輸入值的時候,驗證器運行,判斷是否是全數(shù)字,如果不是就進行替換。我們可以得到如下的驗證器:

onlyNumber(): ValidatorFn {
  return (control: AbstractControl): {[key: string]: any} | null => {
    // value有值且如果值包含非數(shù)字,就需要替換
    if (control.value && !/^\d*$/.test(control.value)) {
      control.setValue(control.value.replace(/[^0-9]/ig, ''), {
        emitEvent: false,
        emitViewToModelChange: false,
      });
    }
    return null;
  };
}

將驗證器使用在我們的響應(yīng)式表單上:

this.validateForm = this.fb.group({
  code: [33, [Validators.required, this.onlyNumber(), Validators.maxLength(6)]],
});

運行程序,隨便輸入來測試測試,竟然是ok的?😯(那我前幾次的時候是做了什么騷造作讓瀏覽器堆棧溢出的???)

emmmmmmmm。。。。。。我上次確實是讓瀏覽器堆棧溢出了,這次正常反而很奇怪了。不影響,我們來看看setValue(value, options)的options幾個配置參數(shù)吧:

  • onlySelf:如果為 true,則每次變更只影響該控件本身,不影響其父控件。默認為 false。
  • emitEvent:如果為 true 或未提供(默認),則當控件值變化時, statusChanges 和 valueChanges 這兩個 Observable 都會以最近的狀態(tài)和值發(fā)出事件。 如果為 false,則不會發(fā)出事件。
  • emitModelToViewChange:如果為 true 或未提供(默認),則每次變化都會觸發(fā)一個 onChange 事件以更新視圖。
  • emitViewToModelChange:如果為 true 或未提供(默認),則每次變化都會觸發(fā)一個 ngModelChange 事件以更新模型。

首先,對于onlySelf來講,如果我們有跨字段的驗證的話,設(shè)置這個為false就不影響表單層次的驗證器。emitEvent是對statusChange和valeChanges兩個Observable的影響,一般我們用Observable的方式監(jiān)聽字段的值變化時有用到。emitModelToViewChange配置是觸發(fā)onChange來更新視圖的,如果如果設(shè)置為false的話,無論我們怎么更新字段的值,是不會顯示在頁面上的。emitViewToModelChange觸發(fā)ngModelCahnge時間更新模型,但好像這個參數(shù)設(shè)置為false并沒什么用。

得得得,好的就行。

假如我們需要在驗證的條件也和其他表單字段有關(guān)系怎么辦?那我們需要formGroup級的驗證。

formGroup的驗證器

我們需要這樣創(chuàng)建驗證器,返回一個由formGroup構(gòu)成的驗證器:

onlyNumberValidator(formKeys: string[]): ValidatorFn {
  return (formGroup: FormGroup): ValidationErrors | null => {
    for (const key of formKeys) {
      const value = formGroup.controls[key].value;
      if (value && !/^\d*$/.test(value)) {
        formGroup.controls[key].setValue(value.replace(/[^0-9]/ig, ''), {
          onlySelf: true,
        });
      }
    }
    return null;
  }};

使用:

this.validateForm = this.fb.group({
  typeList: [[]],
  feeRate: [null, [Validators.required, Validators.pattern(/^[0-9]+(.[0-9]{1,2})?$/), Validators.max(0.999)]],
  code: [33, [Validators.required, Validators.maxLength(6)]],
}, {
  validator: this.onlyNumberValidator(['code']),
});

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 從?Angular?Route?中提前獲取數(shù)據(jù)的方法詳解

    從?Angular?Route?中提前獲取數(shù)據(jù)的方法詳解

    這篇文章主要介紹了從?Angular?Route?中提前獲取數(shù)據(jù),通過本文,你將學會使用?resolver,?在?Angular?App?中應(yīng)用?resolver,應(yīng)用到一個公共的預(yù)加載導航,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Angular2 自定義validators的實現(xiàn)方法

    Angular2 自定義validators的實現(xiàn)方法

    angular 當需要form表單需要驗證時,angular自帶了許多校驗器,但是很多時候自帶的無法滿足業(yè)務(wù)需求,這時候就需要自定義的校驗器,下面通過本文給大家分享Angular2 自定義validators的實現(xiàn)方法,需要的朋友參考下吧
    2017-07-07
  • Angular4自制一個市縣二級聯(lián)動組件示例

    Angular4自制一個市縣二級聯(lián)動組件示例

    本篇文章主要介紹了Angular4自制一個市縣二級聯(lián)動組件示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Angular2 組件交互實例詳解

    Angular2 組件交互實例詳解

    Angular2應(yīng)用程序?qū)嶋H上是有很多父子組價組成的組件樹,因此,了解組件之間如何通信,特別是父子組件之間,對編寫Angular2應(yīng)用程序具有十分重要的意義。下面通過本文給大家介紹Angular2 組件交互知識,感興趣的朋友一起看看吧
    2017-08-08
  • Angularjs使用ng-repeat中$even和$odd屬性的注意事項

    Angularjs使用ng-repeat中$even和$odd屬性的注意事項

    無可否認angularjs的崛起成為前端很大的福利,最近接到項目,框架便選中了angularjs。angularjs最吸引人的地方就是數(shù)據(jù)的雙向綁定和指令了,這篇文章主要介紹了Angularjs中使用ng-repeat的$even和$odd屬性的注意事項,需要的朋友可以參考下
    2016-12-12
  • 將Angular單項目升級為多項目的全過程

    將Angular單項目升級為多項目的全過程

    有時候在開發(fā)的過程中發(fā)現(xiàn)一個Angular項目不太夠用,兩個獨立的項目又不太好復用,這時便需要將原來的Angular項目簡單做個升級,這篇文章主要給大家介紹了關(guān)于將Angular單項目升級為多項目的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Angular實現(xiàn)點擊按鈕后在上方顯示輸入內(nèi)容的方法

    Angular實現(xiàn)點擊按鈕后在上方顯示輸入內(nèi)容的方法

    這篇文章主要介紹了Angular實現(xiàn)點擊按鈕后在上方顯示輸入內(nèi)容的方法,涉及AngularJS事件響應(yīng)及頁面元素屬性動態(tài)設(shè)置相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • 妙用Angularjs實現(xiàn)表格按指定列排序

    妙用Angularjs實現(xiàn)表格按指定列排序

    使用AngularJS的過濾器,可以很容易的實現(xiàn)在表格中,點擊某一列標題進行排序,實現(xiàn)代碼也很簡單,下面小編給大家分享angularjs實現(xiàn)表格按指定列排序的實現(xiàn)代碼,需要的的朋友參考下吧
    2017-06-06
  • AngularJS基礎(chǔ) ng-copy 指令實例代碼

    AngularJS基礎(chǔ) ng-copy 指令實例代碼

    本文主要介紹AngularJS ng-copy 指令,這里幫大家整理了ng-copy指令的基礎(chǔ)資料,并附有示例代碼和效果圖,有需要的朋友參考下
    2016-08-08
  • Angular @HostBinding()和@HostListener()用法

    Angular @HostBinding()和@HostListener()用法

    本篇文章主要介紹了Angular @HostBinding()和@HostListener()用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03

最新評論

宣城市| 新巴尔虎左旗| 宝鸡市| 遵化市| 蒙城县| 巴马| 南投县| 卢氏县| 玛沁县| 虹口区| 东光县| 沅江市| 凤翔县| 吕梁市| 辽阳市| 石嘴山市| 牡丹江市| 汝州市| 任丘市| 沐川县| 邵武市| 昌吉市| 永新县| 绥化市| 紫金县| 大足县| 洛浦县| 台山市| 天柱县| 台中县| 齐齐哈尔市| 文登市| 浮梁县| 峨眉山市| 准格尔旗| 望江县| 保定市| 如东县| 灵武市| 米林县| 台安县|