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

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

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

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

也就是說(shuō)不用自己寫(xiě)一些邏輯,直接綁定指令就行。

ng-app     啟動(dòng)你angular的模塊

 ng-controller 控制器,啟動(dòng)你angualr里面的邏輯代碼作用在頁(yè)面上

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

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

novalidate  表單form配合后期檢測(cè)的

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

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

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

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

ng-required 檢測(cè)你的input為不為空

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

ng-maxlength 最多輸入限制

ng-minlength 最少輸入限制

ng-disabled="myForm.$invalid" 臟檢測(cè)

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

仔細(xì)回想以前使用響應(yīng)式表單的驗(yàn)證器的時(shí)候,只是驗(yàn)證輸入的值是否非法,而沒(méi)有做對(duì)應(yīng)的限制輸入,比如當(dāng)輸入一串金額的時(shí)候只能輸入數(shù)字,有這種需求的時(shí)候,我們?cè)撛趺醋鱿拗戚斎??用input來(lái)監(jiān)聽(tīng)?用onModelChange來(lái)監(jiān)聽(tīng)?我們可以直接寫(xiě)在驗(yàn)證器里面。

表單的驗(yàn)證分為模板驅(qū)動(dòng)驗(yàn)證和響應(yīng)式表單的驗(yàn)證,響應(yīng)式表單添加自定義驗(yàn)證器非常方便,所以我們來(lái)直接以響應(yīng)式表單的驗(yàn)證為研究基礎(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)建的這個(gè)響應(yīng)式表單是要驗(yàn)證一個(gè)谷歌驗(yàn)證的「code」字段,并給與了兩個(gè)驗(yàn)證器,一個(gè)必填驗(yàn)證,一個(gè)驗(yàn)證長(zhǎng)度最長(zhǎng)是6位。運(yùn)行起來(lái)后,我們輸入的如果超過(guò)6位范圍輸入框就會(huì)變成紅色,這是OK的。

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

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

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

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

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àn)證器使用在我們的響應(yīng)式表單上:

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

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

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

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

首先,對(duì)于onlySelf來(lái)講,如果我們有跨字段的驗(yàn)證的話(huà),設(shè)置這個(gè)為false就不影響表單層次的驗(yàn)證器。emitEvent是對(duì)statusChange和valeChanges兩個(gè)Observable的影響,一般我們用Observable的方式監(jiān)聽(tīng)字段的值變化時(shí)有用到。emitModelToViewChange配置是觸發(fā)onChange來(lái)更新視圖的,如果如果設(shè)置為false的話(huà),無(wú)論我們?cè)趺锤伦侄蔚闹?,是不?huì)顯示在頁(yè)面上的。emitViewToModelChange觸發(fā)ngModelCahnge時(shí)間更新模型,但好像這個(gè)參數(shù)設(shè)置為false并沒(méi)什么用。

得得得,好的就行。

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

formGroup的驗(yàn)證器

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

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']),
});

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

相關(guān)文章

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

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

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

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

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

    Angular4自制一個(gè)市縣二級(jí)聯(lián)動(dòng)組件示例

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

    Angular2 組件交互實(shí)例詳解

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

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

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

    將Angular單項(xiàng)目升級(jí)為多項(xiàng)目的全過(guò)程

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

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

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

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

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

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

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

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

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

最新評(píng)論

乌鲁木齐县| 江门市| 仁布县| 黄冈市| 浑源县| 饶阳县| 曲周县| 长汀县| 彭州市| 通山县| 方正县| 峨山| 新沂市| 旌德县| 定兴县| 莎车县| 达孜县| 当阳市| 冕宁县| 蒙城县| 滦南县| 垫江县| 柳河县| 西畴县| 永安市| 崇信县| 习水县| 抚松县| 五指山市| 浮梁县| 安多县| 西丰县| 屏山县| 营口市| 南漳县| 银川市| 阳东县| 许昌县| 齐齐哈尔市| 华亭县| 河津市|