中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

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

廢話

創新互聯建站2013年開創至今,先為金秀等服務建站,金秀等地企業,進行企業商務咨詢服務。為金秀企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

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

正文

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

Angular支持的內置validate屬性:

  • required- 設置表單控件值是非空的
  • email - 設置表單控件的格式是email
  • minlength - 設置表單控件值的最小長度
  • maxlength - 設置表單控件長度的最大值
  • pattern - 設置表單控件的值需匹配 pattern 對應的模式

通過表單控件的.valid判斷驗證結果,其結果狀態:

  • valid - 有效
  • invalid - 無效
  • pristine - 表單值未改變
  • dirty - 表單值已改變
  • touched - 表單控件已被訪問過
  • untouched- 表單控件未被訪問過

我們經常會遇到如下場景,表單驗證(樣式比較丑陋請忽略)

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

現在我們要實現 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,
  });
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創新互聯。

當前題目:Angular2自定義表單驗證器的實現方法
文章轉載:http://www.2m8n56k.cn/article8/jojiop.html

成都網站建設公司_創新互聯,為您提供域名注冊網站策劃網站設計定制開發網站維護

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營
主站蜘蛛池模板: 国产2页 | 欧美日韩一区二区综合 | 亚洲欧洲日韩综合色天使不卡 | 黄网站在线播放视频免费观看 | 国产第四页 | 欧美日韩精品高清一区二区 | 日本欧美高清 | 在线视频 日韩 | 国产步兵社区视频在线观看 | 一级a级国产不卡毛片 | 欧美另类视频在线 | 在线一区免费视频播放 | 久章草在线视频 | 一级美女视频 | 日产一区二区三区四区 | 国内精品久久久久久影院老狼 | 男女男精品视频网站在线观看 | 亚洲精品永久一区 | 三级网站视频 | 国产精品一区二区四区 | 国产精品黄色 | 国产一级大片免费看 | 亚洲国产综合人成综合网站00 | 免费观看成为人视频 | 精品无码三级在线观看视频 | 国产99精品免费视频看6 | 台湾三级毛片 | 国产猛烈无遮掩视频免费网站男女 | 91成人免费视频 | 国产综合精品在线 | 欧美一级片在线看 | 另类zoofilia杂交videos | 黄色三级视频网站 | 波多野结衣手机视频一区 | 久久99国产精品久久99 | 成人国产一区二区三区精品 | 澳门一级特黄真人毛片 | 国产99久久精品 | 日韩午夜免费视频 | 精品欧美一区二区在线看片 | 国产欧美日韩不卡一区二区三区 |