VeeValidate的使用場(chǎng)景以及配置詳解

創(chuàng)建vue項(xiàng)目:

10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有貴溪免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

vue init webpack vee

cd ./vee 

npm run dev
 
# or
yarn run dev

安裝 VeeValidate

npm install vee-validate --save
# or
yarn add vee-validate --save

本文中使用的 VeeValidate 版本為 2.1.5

在 App.vue 中引入

import VeeValidate from 'vee-validate';

Vue.use(VeeValidate);

例子

第一個(gè)測(cè)試?yán)?/p>

<template>
 <div class="test1">
 <div>
  <input
  type="text"
  name="nickname"
  v-model="formData.nickname"
  v-validate="'required|min:3|max:10'"
  >
  <p>{{errors.first('nickname')}}</p>
 </div>
 <div>
  <button @click="handleSubmit">Submit</button>
 </div>
 </div>
</template>

<script>
 export default {
 name: "test1",
 data() {
  return {
  formData: {
   nickname: '',
   password: '',
  }
  }
 },
 methods: {
  handleSubmit() {
  this.$validator.validate()
   .then((valid) => {
   if (true === valid) {
    console.log('驗(yàn)證通過(guò)');
   } else {
    console.log(this.$validator.errors.all());
   }
   })
  }
 }
 }
</script>

<style scoped lang="css">
 .test1 {
 width: 900px;
 margin: 0 auto;
 }
</style>

更多配置請(qǐng)參考官網(wǎng)!

我們只是用些常用配置和常用的驗(yàn)證!

中文配置

全局配置

import VeeValidate, {Validator} from 'vee-validate';
import zh_CN from 'vee-validate/dist/locale/zh_CN';
Vue.use(VeeValidate, {
 dictionary: {
 zh_CN: zh_CN
 }
});
Validator.localize('zh_CN');

這樣就可以使用中文提示了!

自定義錯(cuò)誤提示

<template>
 <div class="test2">
 <div><input type="text" v-model="formData.nickname" data-vv-name="nickname" v-validate="'required|min:3|max:10'">
 </div>
 <div>{{errors.first('nickname')}}</div>
 <div><input type="text" v-model="formData.password" data-vv-name="password" v-validate="'required|min:5|max:200'">
 </div>
 <div>{{errors.first('password')}}</div>
 <div>
  <button @click="handleSubmit">Submit</button>
 </div>
 </div>
</template>

<script>
 const validate = {
 custom: {
  nickname: {
  required: () => '昵稱不得為空', //寫法1
  min: "昵稱不得小于3個(gè)字符", //寫法2
  max: () => '昵稱不得大于10個(gè)字符'
  },
  password: {
  required: () => '密碼不得為空',
  min: "密碼不得小于5個(gè)字符",
  max: () => '密碼不得大于200個(gè)字符'
  }
 },
 };

 export default {
 name: "test2",
 data() {
  return {
  formData: {
   nickname: '',
   password: '',
  }
  }
 },
 methods: {
  handleSubmit() {
  this.$validator.validate()
   .then((valid) => {
   if (true === valid) {
    console.log('驗(yàn)證通過(guò)');
   } else {
    console.log(this.$validator.errors.all());
   }
   })
  }
 },
 mounted() {
  this.$validator.localize('zh_CN', validate);
 }
 }
</script>

自定義驗(yàn)證規(guī)則

<template>
 <div class="test2">
 <div><input type="text" v-model="formData.nickname" data-vv-name="nickname" v-validate="'required|min:3|max:10'">
 </div>
 <div>{{errors.first('nickname')}}</div>
 <div><input type="text" v-model="formData.password" data-vv-name="password" v-validate="'required|min:5|max:200'">
 </div>
 <div>{{errors.first('password')}}</div>
 <div><input type="text" v-model="formData.re_password" data-vv-name="re_password"
    v-validate="'required|confirm'">
 </div>
 <div>{{errors.first('re_password')}}</div>
 <div><input type="text" v-model="formData.mobile" data-vv-name="mobile" v-validate="'required|mobile'">
 </div>
 <div>{{errors.first('mobile')}}</div>
 <div>
  <button @click="handleSubmit">Submit</button>
 </div>
 </div>
</template>

<script>
 const validate = {
 custom: {
  nickname: {
  required: () => '昵稱不得為空', //寫法1
  min: "昵稱不得小于3個(gè)字符", //寫法2
  max: () => '昵稱不得大于10個(gè)字符'
  },
  password: {
  required: () => '密碼不得為空',
  min: "密碼不得小于5個(gè)字符",
  max: () => '密碼不得大于200個(gè)字符'
  },
  re_password: {
  required: () => '請(qǐng)?jiān)俅屋斎朊艽a!',
  },
  mobile: {
  required: () => '請(qǐng)輸入手機(jī)號(hào)碼!',
  }
 },
 };

 export default {
 name: "test3",
 data() {
  return {
  formData: {
   nickname: '',
   password: '',
   re_password: '',
   mobile: ''
  }
  }
 },
 methods: {
  handleSubmit() {
  this.$validator.validate()
   .then((valid) => {
   if (true === valid) {
    console.log('驗(yàn)證通過(guò)');
   } else {
    console.log(this.$validator.errors.all());
   }
   })
  }
 },
 mounted() {
  this.$validator.localize('zh_CN', validate);
  this.$validator.extend('mobile', {
  getMessage: field => '手機(jī)號(hào)有誤',
  validate: value => {
   return /^((13|14|15|17|18)[0-9]{1}\d{8})$/.test(value)
  }
  })
  this.$validator.extend('confirm', {
  getMessage: field => '兩次密碼輸入不一致',
  validate: value => {
   return value === this.formData.password
  }
  })
 }
 }
</script>

顯示第一個(gè)錯(cuò)誤!

有時(shí)候我們需要在彈出層中提示用戶 所以要顯示第一個(gè)錯(cuò)誤

this.$validator.errors.items[0].msg

例子 發(fā)驗(yàn)證碼和注冊(cè)!

這個(gè)例子中發(fā)驗(yàn)證碼是一個(gè)驗(yàn)證 注冊(cè)又是一個(gè)驗(yàn)證 所以有點(diǎn)意義!

在發(fā)送驗(yàn)證碼的時(shí)候需要驗(yàn)證手機(jī)號(hào)碼和圖形驗(yàn)證碼 注冊(cè)的時(shí)候需要驗(yàn)證除圖形驗(yàn)證碼之外的數(shù)據(jù)

VeeValidate 的使用場(chǎng)景以及配置詳解

VeeValidate 的使用場(chǎng)景以及配置詳解

template

<template>
 <div class="reg">
 <div class="form_item">
  <div class="input">
  <input
   type="text"
   name="mobile"
   data-vv-name="mobile"
   v-model="mobile"
   v-validate="'required|mobile'"
   placeholder="手機(jī)號(hào)碼"
  >
  </div>
  <div class="err">{{errors.first('mobile')}}</div>
 </div>
 <div class="form_item">
  <div class="input">
  <input
   type="text"
   v-model="img_captcha"
   name="img_captcha"
   placeholder="圖形驗(yàn)證碼"
   v-validate="'required'"
  >
  </div>
  <div class="err">{{errors.first('img_captcha')}}</div>
 </div>
 <div class="form_item">
  <div class="input send_sms">
  <input
   type="text"
   v-validate="'required|length:6'"
   v-model="sms_captcha"
   name="sms_captcha"
   placeholder="

style 代碼(這個(gè)是隨便寫的 原生css大家不要吐槽哈)

<style>
 .err {
 color: red;
 font-size: 12px;
 text-align: left;
 }

 .reg {
 width: 500px;
 margin: 0 auto;
 }

 .send_sms {
 position: relative;
 }

 .send_sms_btn {
 position: absolute;
 width: 100px;
 height: 30px;
 right: -11px;
 top: 2px;
 cursor: pointer;
 border: none;
 border-radius: 4px;
 background-color: #e4393c;
 outline: none;
 color: #fff;
 }

 .form_item {
 margin-bottom: 10px;
 width: 400px;
 }

 input {
 width: 400px;
 height: 30px;
 border: 1px solid #999;
 border-radius: 4px;
 outline: none;
 padding-left: 10px;
 }

 .reg_btn {
 width: 100px;
 height: 30px;
 border: none;
 border-radius: 4px;
 background-color: #e4393c;
 outline: none;
 cursor: pointer;
 color: #fff;
 }
</style>

js

<script>
 import {messages} from '../validate/reg'

 export default {
 name: "reg",
 data() {
  return {
  url: '',
  age: '',
  email: '',
  birthday: '',
  id_card: '',
  nickname: '',
  mobile: '',
  img_captcha: '',
  sms_captcha: '',
  password: '',
  re_password: '',
  }
 },
 mounted() {
  this.$validator.localize('zh_CN', messages);
  this.$validator.extend('mobile', {
  getMessage: field => '手機(jī)號(hào)有誤',
  validate: value => {
   return /^((13|14|15|17|18)[0-9]{1}\d{8})$/.test(value)
  }
  });
  this.$validator.extend('id_card', {
  getMessage: field => '身份證號(hào)碼格式有誤',
  validate: value => {
   return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)
  }
  });
 },
 methods: {
  handleSubmit() {
  this.$validator.errors.clear();
  this.$validator.validateAll({
   mobile: this.mobile,
   password: this.password,
   sms_captcha: this.sms_captcha,
   re_password: this.re_password,
   url: this.url,
   age: this.age,
   email: this.email,
   birthday: this.birthday,
   id_card: this.id_card,
   nickname: this.nickname,
  }).then((valid) => {
   console.log(valid);
   if (true === valid) {
   console.log('驗(yàn)證通過(guò)');
   } else {
   console.log(this.$validator.errors.all());
   }
  });
  },
  handleSendSms() {
  this.$validator.errors.clear();
  this.$validator.validateAll({
   mobile: this.mobile,
   img_captcha: this.img_captcha
  }).then((valid) => {
   console.log(valid);
   if (true === valid) {
   console.log('驗(yàn)證通過(guò)');
   } else {
   console.log(this.$validator.errors.all());
   }
  });
  }
 }
 }
</script>

外部引入的js (自定義提示內(nèi)容)

export const messages = {
 custom: {
 mobile: {
  required: () => '請(qǐng)輸入手機(jī)號(hào)碼!',
  mobile: () => '手機(jī)號(hào)碼有誤',
 },
 img_captcha: {
  required: () => '請(qǐng)輸入圖形驗(yàn)證碼!',
 },
 sms_captcha: {
  required: () => '請(qǐng)輸

擴(kuò)展內(nèi)容

自定義錯(cuò)誤信息中顯示配置驗(yàn)證規(guī)則中的參數(shù)

export const messages = {
 custom: {
 nickname: {
  required: () => "請(qǐng)輸入年齡",
  between: (fiield,params) => `年齡必須在${params[0]}-${params[1]}歲之間"
 }
 },
};

規(guī)則里面第一個(gè)參數(shù)是字段名稱 第二個(gè)參數(shù)是驗(yàn)證規(guī)則后面的參數(shù);

驗(yàn)證指定字段

validateAll(field Object) 
validateAll({mobile:this.moble});

還可以使用 data-vv-scope 來(lái)指定 但是該方法并不適用一些場(chǎng)景;

顯示錯(cuò)誤信息的時(shí)候必須要指定scope的值 不然不會(huì)顯示錯(cuò)誤信息

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

新聞名稱:VeeValidate的使用場(chǎng)景以及配置詳解
網(wǎng)站網(wǎng)址:http://muchs.cn/article38/gddgsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計(jì)公司、云服務(wù)器、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)