自带气泡提示的vue校验插件(vue-verify-pop)


Posted in Javascript onApril 07, 2017

本教程大家分享了自带气泡提示的vue校验插件,供大家参考,具体内容如下

安装

npm install vue-verify-pop

使用

VUE版本:1.x
必须在vue-cli生成的webpack模板环境中使用

一、在./main.js中执行全局配置

import vue from 'vue'
import verify from 'vue-verify-pop'
vue.use(verify)
// 以下配置非必须,按你的需求来
// 配置默认校验不通过时的提示信息
verify.errMsg = YourErroMsg
// 增加校验规则
verify.addRule('myRule', (v) => {return '校验不通过'})

二、在表单元素中配置校验规则

<!--待校验元素的pop容器-->
<pop>
 <!--该输入框内容为最多为两位小数的数字-->
 <input v-verify decimal-length="2">
</pop>

自带气泡提示的vue校验插件(vue-verify-pop)

ok,您已经完成了一个基础校验。气泡提示怎么样?丑的话自己用css改吧。。
当输入框失去焦点时会自动触发校验,如果校验不通过会出现气泡。再次输入气泡会消失

支持的校验规则(继承verify-base.js)

  • length: 校验文本长度
  • minLength: 校验文本最短长度
  • maxLength: 校验文本最长长度
  • maxNumber: 校验数字最大值
  • minNumber: 校验数字最小值
  • decimalLength: 校验小数位
  • number: 校验是否为数字
  • int: 校验是否为整数
  • phone: 校验是否为手机号
  • idCard: 校验是否为身份证号
  • bankCard: 校验是否为银行卡号
  • email: 校验是否为电子邮件地址
  • verifyCode: 校验是否为6位数字验证码
  • canBeNull: 当参数为空时跳过校验,不会执行后面的校验规则(注意:自定义校验函数'verify'仍然会执行)

重要参数说明

注意:规则中不能有大写字母,用中划线分隔,同vue props属性设置规则

errMsg

用于自定义校验不通过提示

<pop>
 <input v-verify length="10" err-msg="请输入正确的卡号">
</pop>

maxNumber

注意小于和小于等于的写法

<!--该输入框内容必须为小于等于10的数字-->
<pop>
 <input v-verify max-number="10">
</pop>
<!--该输入框内容必须为小于10的数字,通过'!'来标识-->
<pop>
 <input v-verify max-number="!10">
</pop>

minNumber

参考maxNumber配置

pop

用于设置气泡组件的位置。
默认情况下,插件会查找待校验元素的分发对象或父容器(父容器的父容器的父容器...)是否为pop组件,如果找到则使用之。
当待校验元素和气泡提示不再满足父子容器关系时,可以用如下方式去指定:

<!--当校验不通过时,气泡提示会出现在这个div上面-->
<pop id="cardIdPop">
  <div>我是一个div</div>
</pop>
<input v-verify length="10" err-msg="卡号不正确" pop="cardIdPop">

noCache

用于禁止插件对校验结果的缓存。默认情况下,插件会缓存上次的校验结果,直到待校验元素的值发生变化

<pop>
 <input v-verify length="10" err-msg="卡号不正确" no-cache>
</pop>

canBeNull

插件默认校验输入内容不为空,该参数一般用于如下情况,比如邀请码这种一般可以为空,不为空又需要校验的输入项

自定义校验方法verify始终会执行,主要考虑到该校验方法中的校验对象很可能不仅仅是输入框本身的值,故不应受该配置项的影响

<!--当邀请码不为空时才校验长度是否等于10-->
<pop>
 <input v-verify length="10" err-msg="邀请码不正确" can-be-null>
</pop>

watch

监听其他变量,触发自身校验。
一个常见例子:最少参与人数不能大于最多参与人数,当最少参与人数变化时应当触发最多参与人数的校验

<template>
 <pop>
  <input placeholder="最少参与人数" v-verify v-model="minNumber" v-verify int>
 </pop>
 <pop>
  <input placeholder="最多参与人数" v-verify v-model="minNumber" v-verify int :verify="verifyMaxNumber" :watch="minNumber">
 </pop>
</template>
<script>
export default{
 data () {
  return {
   minNumber: ''
  }
 },
 methods: {
  verifyMaxNumber (val) {
   if (val - this.minNumber < 0) return '最多参与人数不能小于最少参与人数'
  }
 }
}
</script>

规则简写

number/int/phone等无须设定值的规则可以直接:

<pop>
 <!--该输入框内容必须为手机号-->
 <input v-verify phone>
</pop>

maxNumber/minNumber/decimalLength无须写number规则

<pop>
 <!--该输入框内容必须为不大于10的数字-->
 <input v-verify max-number="10">
 <!--不用这么写-->
 <input v-verify number max-number="10">
</pop>

自定义校验方法

如果自带的校验方法满足不了您的需求,可以在校验规则中插入您自己的校验方法

<template>
 <pop>
  <!--通过给props.verify赋值来植入自定义校验-->
  <!--当length规则通过时才会执行自定义校验-->
  <input v-verify length="10" :verify="verifyCardId" err-msg="卡号不正确">
 </pop>
</template>
<script>
export default{
 methods: {
  verifyCardId (val) {
   // val: 待校验的值
   // 可以直接return校验不通过的提示
   // if (val.substr(0,1) !== '0') return '卡号不正确'
   // 如果直接return true/false 校验不通过提示将使用errMsg或默认错误提示
   // return val.substr(0,1) === '0'
  }
 }
}
</script>

自定义校验规则

和自定义校验方法的区别是这个适用于全局,等于增加插件自带的校验规则

// 新增校验是否为6位数字 val: 待校验的值 rule: 规则值。
// 校验是否为6位数字这种一般时不需要额外参数用来对比,所以rule参数用不到。校验文本长度,数字大小这种才会用到rule
// <input v-verify length="6"> '6'会作为rule参数
var verifyBase = verify.verifyBase
verify.addRule('number6', (val, rule) => {
 // 判断是否为6位数字
 // 只需要关注错误的情况 返回默认出错提示即可
 if (!verifyBase('number')(val).valid || !verifyBase('length')(val, 6)) return '请输入正确的6位数字'
})

调用

<!--校验不通过提示优先errMsg,然后才是您自定义规则中返回的默认出错提示-->
<input v-verify number6 err-msg="请输入正确的6位数字验证码">

手动触发校验&分组校验

<template>
 <pop>
  <!--给目标元素设置v-el-->
  <input v-verify length="10" err-msg="卡号1不正确" v-el:ipt>
 </pop>
 <pop>
  <!--给目标元素设置id-->
  <input v-verify length="10" err-msg="卡号2不正确" id="ipt">
 </pop>
 <!--给目标元素设置组名-->
 <verify name="verifyGroup">
  <pop>
   <input v-verify length="10" err-msg="卡号3不正确">
  </pop>
  <pop>
   <input v-verify length="10" err-msg="卡号4不正确">
  </pop>
 </verify>
</template>
<script>
export default{
 ready () {
  // 调用vm对象中$verify方法
  // 无参调用会触发当前vm中所有的待校验元素执行校验并显示校验气泡
  this.$verify()
  // 通过传id参数('#'+id)触发输入框的校验并显示校验气泡
  this.$verify('#ipt')
  // 通过传dom元素触发输入框的校验并显示校验气泡
  this.$verify(this.$els.ipt)
  // 通过传校验组名来校验该组的所有待校验元素
  this.$verify('verifyGroup')
  // 只校验,不显示校验气泡
  this.$verify('verifyGroup', false)
  // 返回:
  {
   // 所有校验结果是否都通过
   valid: true/false,
   results: [
    {
     // 校验的dom元素
     el: DOM,
     // 该元素校验是否通过
     valid: true/false,
     // 错误信息
     msg: ''
    }
   ]
  }
 }
}
</script>

插件的默认校验不通过提示模版

{
 number: {
  common: '请输入数字',
  // >
  maxNumber: '该输入框数字不能大于{maxNumber}',
  // >=
  maxNumber2: '该输入框数字应小于{maxNumber}',
  // <
  minNumber: '该输入框数字不能小于{minNumber}',
  // <=
  minNumber2: '该输入框数字应大于{minNumber}',
  decimalLength: '该输入框最多接受{decimalLength}位小数'
 },
 // 特殊类型
 int: '该输入框仅接受整数',
 phone: '请输入正确的手机号',
 idCard: '请输入正确的身份证号',
 bankCard: '请输入正确的银行卡号',
 email: '请输入正确的邮箱',
 verifyCode: '请输入正确的验证码',
 common: {
  empty: '请补充该项内容',
  length: '请输入{length}位字符',
  minLength: '该输入框内容至少{minLength}位'
 },
 specialInput: {
  checkbox: '请勾选我'
 }
}

您可以按照上述格式自定义您的错误提示

verify.errMsg = {}

也可以只修改某些项

verify.errMsg.int = '{mark}必须为整数'

彩蛋

校验插件不仅能检测到输入内容的变化,绑定值的变化同样在掌控之内,也就是说校验气泡的出现和消失您完全无须手动控制

<!--当卡号输入框出校验气泡提示时,cardId值的变化或重新输入卡号,气泡提示都会消失-->
<pop>
 <input v-model="cardId" v-verify length="10" err-msg="卡号不正确">
</pop>

verifyBase

本插件校验的核心方法来自verify-base

// 通过该方式获取verifyBase以使用其内置的各种校验方法
verify.verifyBase

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 学习笔记 传智博客佟老师附详细注释
Sep 12 Javascript
Prototype RegExp对象 学习
Jul 19 Javascript
Javascript attachEvent传递参数的办法
Dec 14 Javascript
带左右箭头图片轮播的JS代码
Dec 18 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
Oct 08 Javascript
JS仿百度自动下拉框模糊匹配提示
Jul 25 Javascript
jQuery插件之validation插件
Mar 29 jQuery
从零开始学习Node.js系列教程一:http get和post用法分析
Apr 13 Javascript
vue项目持久化存储数据的实现代码
Oct 01 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
vue获取data数据改变前后的值方法
Nov 07 Javascript
vue学习笔记之slot插槽基本用法实例分析
Feb 01 Javascript
JS仿Base.js实现的继承示例
Apr 07 #Javascript
vue-hook-form使用详解
Apr 07 #Javascript
ES6实现的遍历目录函数示例
Apr 07 #Javascript
如何使用vuejs实现更好的Form validation?
Apr 07 #Javascript
JS实现css hover操作的方法示例
Apr 07 #Javascript
微信小程序 chooseImage选择图片或者拍照
Apr 07 #Javascript
微信小程序page的生命周期和音频播放及监听实例详解
Apr 07 #Javascript
You might like
PHP 模拟$_PUT实现代码
2010/03/15 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
2011/07/03 PHP
初识PHP中的Swoole
2016/04/05 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
python实现浪漫的烟花秀
2019/01/30 Python
详解python中init方法和随机数方法
2019/03/13 Python
python根据时间获取周数代码实例
2019/09/30 Python
python如何把字符串类型list转换成list
2020/02/18 Python
介绍一下linux文件系统分配策略
2012/11/17 面试题
什么是servlet
2012/05/08 面试题
经销商会议欢迎词
2014/01/11 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
民主生活会发言材料
2014/10/20 职场文书
2015员工年度考核评语
2015/03/25 职场文书
入党转正申请报告
2015/05/15 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书