国产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
當前位置: 首頁 - 科技 - 知識百科 - 正文

Angular2 自定義表單驗證器的實現方法

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

Angular2 自定義表單驗證器的實現方法

Angular2 自定義表單驗證器的實現方法:廢話 最近由于項目上需要用到表單驗證,前面直接通過 (input) 事件進行數據檢查,但是不好和自帶的驗證器統一,而且也不正統。于是打算研究一下自定義驗證器,網上類似的文章很多,但是自己在實現的過程中還是遇到了一些問題。于是還是啰嗦的自己寫一篇文章。
推薦度:
導讀Angular2 自定義表單驗證器的實現方法:廢話 最近由于項目上需要用到表單驗證,前面直接通過 (input) 事件進行數據檢查,但是不好和自帶的驗證器統一,而且也不正統。于是打算研究一下自定義驗證器,網上類似的文章很多,但是自己在實現的過程中還是遇到了一些問題。于是還是啰嗦的自己寫一篇文章。

廢話

最近由于項目上需要用到表單驗證,前面直接通過 (input) 事件進行數據檢查,但是不好和自帶的驗證器統一,而且也不正統。于是打算研究一下自定義驗證器,網上類似的文章很多,但是自己在實現的過程中還是遇到了一些問題。于是還是啰嗦的自己寫一篇文章。

正文

這里有官方文檔:驗證響應式表單,用戶的視覺提示,自定義驗證器,這篇文章是根據這些文檔所來(前面兩者就不再贅述比較簡單,也說的比較清楚)

Angular支持的內置validate屬性:

  • required- 設置表單控件值是非空的
  • email - 設置表單控件的格式是email
  • minlength - 設置表單控件值的最小長度
  • maxlength - 設置表單控件長度的最大值
  • pattern - 設置表單控件的值需匹配 pattern 對應的模式
  • 通過表單控件的.valid判斷驗證結果,其結果狀態:

  • valid - 有效
  • invalid - 無效
  • pristine - 表單值未改變
  • dirty - 表單值已改變
  • touched - 表單控件已被訪問過
  • untouched- 表單控件未被訪問過
  • 我們經常會遇到如下場景,表單驗證(樣式比較丑陋請忽略)

    現在我們要實現 url 驗證,可以直接通過 正則表達式來匹配,這樣的話,直接用 Angular 自帶的驗證器即可,但是如果要兼容大寫呢?我們就不能簡單的直接使用正則來匹配了,我們需要在判斷之前進行一次轉換,把內容全部轉換成小寫,才能進行正則判斷。

    這里我們 新建一個 ValidatorBase 類來存放所有的驗證,并且新建一個 靜態方法 urlValidator(input:FormControl) 來對數據進行 url 驗證。具體方法如下:

    import { FormControl } from '@angular/forms';
    import { Injectable } from '@angular/core'
    
    export class ValidateBase{
     public static urlValidator(input: FormControl){
     let validateString = "(https?://|WWW|www|ftp://|file://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[.]+[-A-Za-z0-9+&@#/%=~_|]";
    
     console.log(input.value);
     //set value 
     let v = input.value;
    
     if(v!=undefined&&v!="")
     {
     if(v.toLowerCase().match(validateString))
     {
     return null;
     }
     else{
     return {
     isUrl:true
     }
     }
     }
     return null;
     }
    }

    注意:

    這里當匹配成功(即驗證成功是需要返回 null 的,不能返回 {isUrl:false},失敗是返回的{isUrl:true},不是返回 {isUrl:false}),這樣才會讓最后表單驗證的值為正確的表現。

    這里{isUrl:true} 中的 isUrl,即為傳入的 FormControl 的.hasError()中的參數值。

    調用頁面

    <form [formGroup]="detailForm" (ngSubmit)="submit()">
     <div>
     <label for="LinkedURL">LinkedURL:</label>
     <input type="LinkedURL" name="LinkedURL" id="LinkedURL" [formControl]="LinkedURL">
     <div class="col-xs-4 col-sm-4" [style.color]="(LinkedURL.touched&&LinkedURL.valid==false)?'#d16e6c':'green'" [hidden]="LinkedURL.untouched">
     <div [hidden]="!LinkedURL.hasError('maxlength')">LinkedURL can not be greater than 250 characters.</div>
     <div [hidden]="!LinkedURL.hasError('isUrl')">LinkedURL is not an url.</div>
     <div [hidden]="!LinkedURL.hasError('required')">Required field.</div>
     <!--Success!-->
     <div [style.color]="'green'" [hidden]="!LinkedURL.valid">Validate success!</div>
     </div>
     </div>
     <button type="submit" [disabled]="!detailForm.valid">Log In</button>
    </form>

    調用頁面對應 ts

    import { ValidateBase } from './../../Validators/Validator.base';
    import { Component, OnInit } from '@angular/core';
    
    import {
     FormGroup,
     FormBuilder,
     FormControl,
     Validators
     } from '@angular/forms';
    
    @Component({
     selector: 'validate-component',
     templateUrl: 'validate.component.html'
     })
    
    export class SweepstakesDetailComponent implements OnInit {
    
     private detailForm: FormGroup;
     private LinkedURL: FormControl;
    
     ngOnInit(): void {
     this.validateForm();
     }
    
     private validateForm(){
    
     this.LinkedURL = new FormControl('',[
     Validators.required,
     Validators.maxLength(250),
     ValidateBase.urlValidator
     ]);
    
     //form
     this.detailForm = this.formBuilder.group({
     LinkedURL:this.LinkedURL,
     });
     }
    }

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

    文檔

    Angular2 自定義表單驗證器的實現方法

    Angular2 自定義表單驗證器的實現方法:廢話 最近由于項目上需要用到表單驗證,前面直接通過 (input) 事件進行數據檢查,但是不好和自帶的驗證器統一,而且也不正統。于是打算研究一下自定義驗證器,網上類似的文章很多,但是自己在實現的過程中還是遇到了一些問題。于是還是啰嗦的自己寫一篇文章。
    推薦度:
    標簽: 實現 表單 驗證器
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲国产成人久久99精品 | 国产成人精品一区二区三区… | 欧美日韩黄色大片 | 一区二区三区视频在线播放 | 精品国产日韩亚洲一区91 | 国产福利一区二区三区在线视频 | 久久精品人 | 久久99国产精一区二区三区 | 欧美系列在线 | 国产激情在线观看 | 日本韩国在线 | 亚洲精品免费在线观看 | 日韩一页| 无遮挡在线观看 | 国产精品成人69xxx免费视频 | 99国产精品久久久久久久成人热 | 日韩综合第一页 | 欧美日韩成人高清色视频 | 日韩精品第三页 | 欧美三页 | 久久91这里精品国产2020 | 欧美一区二区三区四区视频 | 国产精品久久久 | 欧美一区三区 | 日韩午夜在线视频 | 久久亚洲精品国产精品婷婷 | 亚洲精品视频在线 | 国产日韩欧美精品在线 | 日韩在线免费视频 | 日韩欧美国产精品第一页不卡 | 国产成人乱码一区二区三区在线 | 国产一区二区三区精品视频 | 国产激情一区二区三区成人91 | 天天色天天射天天操 | 国产一区二区在线观看视频 | 欧美高清一区二区三区 | 91精品国产综合久久久久久 | 久久福利资源网站免费看 | 国产性做久久久久久 | 亚洲国产日韩欧美一区二区三区 | 日本一区二区不卡在线 |