创建vue项目:

vue init webpack veecd ./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);

例子

第一个测试例子

<template><div class="test1"><div><inputtype="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('验证通过');} else {console.log(this.$validator.errors.all());}})}}}
</script><style scoped lang="css">.test1 {width: 900px;margin: 0 auto;}
</style>

更多配置请参考官网!
我们只是用些常用配置和常用的验证!

中文配置

全局配置

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');

这样就可以使用中文提示了!

自定义错误提示

<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: () => '昵称不得为空', //写法1min: "昵称不得小于3个字符", //写法2max: () => '昵称不得大于10个字符'},password: {required: () => '密码不得为空',min: "密码不得小于5个字符",max: () => '密码不得大于200个字符'}},};export default {name: "test2",data() {return {formData: {nickname: '',password: '',}}},methods: {handleSubmit() {this.$validator.validate().then((valid) => {if (true === valid) {console.log('验证通过');} else {console.log(this.$validator.errors.all());}})}},mounted() {this.$validator.localize('zh_CN', validate);}}
</script>

自定义验证规则

<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: () => '昵称不得为空', //写法1min: "昵称不得小于3个字符", //写法2max: () => '昵称不得大于10个字符'},password: {required: () => '密码不得为空',min: "密码不得小于5个字符",max: () => '密码不得大于200个字符'},re_password: {required: () => '请再次输入密码!',},mobile: {required: () => '请输入手机号码!',}},};export default {name: "test3",data() {return {formData: {nickname: '',password: '',re_password: '',mobile: ''}}},methods: {handleSubmit() {this.$validator.validate().then((valid) => {if (true === valid) {console.log('验证通过');} else {console.log(this.$validator.errors.all());}})}},mounted() {this.$validator.localize('zh_CN', validate);this.$validator.extend('mobile', {getMessage: field => '手机号有误',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>

显示第一个错误!

有时候我们需要在弹出层中提示用户 所以要显示第一个错误

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

例子 发验证码和注册!

这个例子中发验证码是一个验证 注册又是一个验证 所以有点意义!
在发送验证码的时候需要验证手机号码和图形验证码 注册的时候需要验证除图形验证码之外的数据

template

<template><div class="reg"><div class="form_item"><div class="input"><inputtype="text"name="mobile"data-vv-name="mobile"v-model="mobile"v-validate="'required|mobile'"placeholder="手机号码"></div><div class="err">{{errors.first('mobile')}}</div></div><div class="form_item"><div class="input"><inputtype="text"v-model="img_captcha"name="img_captcha"placeholder="图形验证码"v-validate="'required'"></div><div class="err">{{errors.first('img_captcha')}}</div></div><div class="form_item"><div class="input send_sms"><inputtype="text"v-validate="'required|length:6'"v-model="sms_captcha"name="sms_captcha"placeholder="短信验证码"><button class="send_sms_btn" @click="handleSendSms">获取验证码</button></div><div class="err">{{errors.first('sms_captcha')}}</div></div><div class="form_item"><div class="input"><inputtype="text"name="password"v-validate="'required|min:8'"v-model="password"placeholder="登录密码"ref="password"></div><div class="err">{{errors.first('password')}}</div></div><div class="form_item"><div class="input"><inputtype="text"name="re_password"v-validate="'required|confirmed:password'"v-model="re_password"placeholder="再次输入登录密码"></div><div class="err">{{errors.first('re_password')}}</div></div><div class="form_item"><div class="input"><inputtype="text"name="nickname"v-validate="'required|min:3|max:10'"v-model="nickname"placeholder="请输入昵称"></div><div class="err">{{errors.first('nickname')}}</div></div><div class="form_item"><div class="input"><inputtype="text"name="id_card"v-validate="'required|id_card'"v-model="id_card"placeholder="请输入身份证号码"></div><div class="err">{{errors.first('id_card')}}</div></div><div class="form_item"><div class="input"><inputtype="date"name="birthday"v-validate="'required|date_format:YYYY-MM-DD'"v-model="birthday"placeholder="请输入生日"></div><div class="err">{{errors.first('birthday')}}</div></div><div class="form_item"><div class="input"><inputtype="text"name="url"v-validate="'required|url'"v-model="url"placeholder="请输入个人网址"></div><div class="err">{{errors.first('url')}}</div></div><div class="form_item"><div class="input"><inputtype="text"name="email"v-validate="'required|email'"v-model="email"placeholder="请输入电子邮箱"></div><div class="err">{{errors.first('email')}}</div></div><div class="form_item"><div class="input"><inputtype="text"name="age"v-validate="'required|between:18,60'"v-model="age"placeholder="请输入年龄"></div><div class="err">{{errors.first('age')}}</div></div><div class="form_item"><button class="reg_btn" @click="handleSubmit">注册</button></div></div>
</template>

style 代码(这个是随便写的 原生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 => '手机号有误',validate: value => {return /^((13|14|15|17|18)[0-9]{1}\d{8})$/.test(value)}});this.$validator.extend('id_card', {getMessage: field => '身份证号码格式有误',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('验证通过');} 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('验证通过');} else {console.log(this.$validator.errors.all());}});}}}
</script>

外部引入的js (自定义提示内容)

export const messages = {custom: {mobile: {required: () => '请输入手机号码!',mobile: () => '手机号码有误',},img_captcha: {required: () => '请输入图形验证码!',},sms_captcha: {required: () => '请输短信验证码!',length: () => '短信验证码为6位数字'},password: {required: () => '密码不得为空',min: () => '密码不得小于8个字符',},re_password: {required: () => '请再次输入密码!',confirmed: () => '两次密码输入不一致'},nickname: {required: () => '请输入昵称',min: () => '昵称最小为3位字符',max: (field, params) => {return `昵称最大为${params[0]}位字符`;}},id_card: {required: "身份证号码不得为空"},birthday: {required: "请选择出生日期",date_format: "出生日期有误"},url: {required: () => "请输入个人网址",url: () => "网址输入有误"},email: {required: () => "请输入电子邮箱",email: () => "电子邮箱输入有误"},age: {required: () => "请输入年龄",between: () => "年龄必须在18-60岁之间"}},
};

扩展内容

自定义错误信息中显示配置验证规则中的参数

export const messages = {custom: {nickname: {required: () => "请输入年龄",between: (fiield,params) => `年龄必须在${params[0]}-${params[1]}岁之间"}},
};

规则里面第一个参数是字段名称 第二个参数是验证规则后面的参数;

验证指定字段

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

还可以使用 data-vv-scope 来指定 但是该方法并不适用一些场景;
显示错误信息的时候必须要指定scope的值 不然不会显示错误信息

VeeValidate 的使用场景以及配置相关推荐

  1. CloudEngine 6800 堆叠场景下配置eth-trunk链路聚合流量负载不均衡

    CloudEngine 6800 堆叠场景下配置eth-trunk链路聚合流量负载不均衡 发布时间:  2016-06-20 浏览次数:  3 下载次数:  0 问题描述 CloudEngine 68 ...

  2. 场景中配置阴影(个人笔记)

    1. 阴影的作用 加强场景中深度感,显示了原本可能看起来平坦的物体的比例和位置 当阴影按预期表现时,它们会增加体验的真实感. 缺少阴影的游戏,会破坏用户的沉浸感 2. 阴影的实现:阴影贴图 Shado ...

  3. 简谈游戏场景灯光配置方案

    http://tieba.baidu.com/p/2690022869 转眼从北京辞职回老家也一年多了,在游戏公司干了几年回来我们这样的小城镇还真不知道该做点什么,所以也一直没找工作,在家花了几个月时 ...

  4. LR 场景选项配置--笔记

    1 tools-options --设置关系到loadgenerator行为应用于一个场景中的所有的load generator 这些设置用于未来所有运行的场景并且通常只需要设置一次 2 expert ...

  5. python日志处理三方工具loguru与常用场景快捷配置

    安装方法: pip install Loguru Loguru文档:https://loguru.readthedocs.io/en/stable/index.html Loguru github页面 ...

  6. 两台深信服防火墙主备部署在出口,前置两台运营商线路接入交换机场景的配置方法

    现有两台深信服防火墙,部署在公网出口,做HA,有电信.联通两条运营商线路,拓扑大概如下: 用户为了防止单台接入交换机故障,所以增加一台接入交换机,并且这两台接入交换机做堆叠. 交换机1的1口接电信线路 ...

  7. 网络技术 — Easy-ip适用的场景及配置

    1.什么是Easy ip? Easy-ip是NAPT的一种特例是单向转换的,配置时候不需要创建公网地址池.NAPT是实现私有IP和NAT的公共IP之间的动态转换.Easy-ip是实现公网IP 地址实现 ...

  8. 玩转华为ENSP模拟器系列 | 同一VdPdNd实例场景下配置IPSec VdPdNd

    素材来源:华为防火墙配置指南 一边学习一边整理试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:玩转华为ENSP模拟器系列 | 合集_COCOgsta的博客-CSDN博客_华为模拟器实验 目标 ...

  9. 卧槽,面试官质疑我不会配置中心原理,看不起谁呢?

    前言 一位读者朋友跟我反馈,能不能写一篇比较全的配置中心的文章.自己最近在面试过程中有被面试官问:如何设计一个配置中心? 这个话题,由于自己在工作中也没实际使用过配置中心,所以对于如何去设计是完全没有 ...

最新文章

  1. [原创]安装Ubuntu Server 14.04后
  2. oracle按时间导出,如何为Oracle导出文件加上时间戳
  3. numpy 排序, 查询功能
  4. 普通路由器封QQ 2010
  5. 博客系统知多少:揭秘那些不为人知的学问(二)
  6. sql server 加密_SQL Server 2016中的新功能–始终加密
  7. 金庸笔下的良好代码风格
  8. TOP6410上windowsce6.0移植笔记(一)
  9. 高等代数第3版下 [丘维声 著] 2015年版_全国硕士研究生入学统一考试管理类联考综合能力考试大纲(2021年版)...
  10. 简明C语言教程(七)scanf 用法
  11. vmware ubuntu 内存不够解决方案
  12. Apache是干什么的?
  13. oracle按序号排序,Oracle排序以及序号的输出
  14. Don't Starve:饥荒
  15. php 容器源码分析,Pimple运行流程浅析(PHP容器)
  16. 为何农历10月1号要祭祖上坟?原来有这么多讲究,你知道吗?
  17. 各种主题瓦片地图在线资源访问总结
  18. PLC通过智能网关 MQTT对接阿里云(带CA证书加密),实现物模型数据显示
  19. 安装opencv3.4遇到Download: opencv_ffmpeg.dll、ippicv等失败的解决方法
  20. on java读书笔记

热门文章

  1. java 反射机制_详解Java中的反射机制的优缺点
  2. 零中频接收机频率转换图_接收机抗噪声技术
  3. ionic4集成高德地图踩坑(二)
  4. 浅谈JavaScript 面向对象编程[转]
  5. QD75运动模块使用
  6. mysql deadlock found when trying to get lock 问题排查
  7. Spring对JNDI的支持方法
  8. Shell编程中Shift的用法(转)
  9. PHP与C sharp互解加密算法
  10. 《EDIUS 6.5快刀手高效剪辑技法》 即将上市