<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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屬性:

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

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

        現在我們要實現 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
        主站蜘蛛池模板: 国产免费午夜a无码v视频| 国产精品免费AV片在线观看| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚欧免费无码aⅴ在线观看| 亚洲精品无码Av人在线观看国产| 羞羞的视频在线免费观看| 五月婷婷亚洲综合| 农村寡妇一级毛片免费看视频| 日韩亚洲国产综合久久久| 免费福利资源站在线视频| 久久精品国产精品亚洲艾草网美妙| 国产va免费观看| 国产精品久久久亚洲| 久久精品视频免费| 亚洲影视一区二区| 成人免费视频软件网站| 香蕉视频在线观看免费| 国产AV无码专区亚洲AV手机麻豆| 免费91最新地址永久入口 | ASS亚洲熟妇毛茸茸PICS| 美女被免费视频网站a国产| 免费一级毛片在线播放放视频| 怡红院亚洲怡红院首页| 免费看又黄又无码的网站 | 亚洲乱码精品久久久久..| 69影院毛片免费观看视频在线 | 日韩免费无码一区二区三区 | 97超高清在线观看免费视频| 亚洲日本一区二区三区| 国产精品免费αv视频| 综合自拍亚洲综合图不卡区| 最近免费中文字幕4| www免费黄色网| 亚洲黄色中文字幕| 国产不卡免费视频| 久艹视频在线免费观看| 亚洲AV无码一区二区一二区| 亚洲AV无码乱码在线观看富二代 | 24小时免费看片| 国产成人精品亚洲| 久久精品国产亚洲AV高清热|