遇到了form表单提交的需求,找了vue的组件觉得不够灵活,有时间自己写了一个。
调用方法 全局引入注册:
import va from 'global/js/va'
va.install(Vue);
// 注册一个全局自定义指令
Vue.directive('va', {})
在每个需要校验的input加上 例如:
<div>
<label>库存:</label>
<input v-va:stock="[{'NonEmpty':'Money'}]" placeholder="请输入库存(份)" v-model="data.stock" tag="库存"
type="number"/>
<p class="red">{{va.stock.message}}</p>
</div>
校验类型:v-va:describe="[{'NonEmpty':''}]" 具体错误类型请看下文
tag:错误提示信息描述
p:展示错误信息
data绑定:
va : { stock : {} },
//sub提交时所用到
msg : { describe : '描述' },
data:{ describe:'' }
当点击but提交form是 触发不能为空校验
var self = this; var va = self.va; for (var i in va) { if (!va[i].isPass) { Vue.set(self.va[i], 'message', self.msg[i] + '不能为空') } }
组件里有一些常用正则:
//常用正则表 var regList = { tel : /^1[34578]\d{9}$/, idCard : /^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/, ImgCode : /^[0-9a-zA-Z]{4}$/, SmsCode : /^\d{4}$/, MailCode: /^\d{4}$/, UserName: /^[\w|\d]{4,16}$/, Password: /^[\w!@#$%^&*.]{6,16}$/, Mobile : /^1[3|4|5|7|8]\d{9}$/, RealName: /^[\u4e00-\u9fa5|·]{2,16}$|^[a-zA-Z|\s]{2,20}$/, BankNum : /^\d{10,19}$/, Money : /^([1-9]\d*|[0-9]\d*\.\d{1,2}|0)$/, Answer : /^\S+$/, Mail : /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/ }
以及提示字段:
// 获得不同的报错信息 function getErrMsg(vaForm, ruleType, ruleValue) { var tag = vaForm.tag var errMsgs = { NonEmpty: `${tag}不能为空`, reg : `${tag}格式错误`, limit : `${tag}必须在${ruleValue[0]}与${ruleValue[1]}之间`, equal : `两次${tag}不相同`, length : `${tag}长度必须在${ruleValue[0]}与${ruleValue[1]}之间`, unique : `${tag}不能相同` } return errMsgs[ruleType] }
都可以自定义添加
具体调用校验方法 例如:v-va:stock="[{'NonEmpty':'Money'}]" stock 在data中va对象校验字段 数组中是在va.js中的校验方法子段,可重复。优先级左到右。
js下载地址:https://github.com/Runtheantland/vue-form