Vue.directive('validate', {
// 在指令第一次背绑定上时调用
bind(el, binding, vnode) {
}
}
<form id="red-package" @submit.prevent="submit" v-validate.formData="validate"> ... <button type="submit" class="save">保存</button> </form>
Vue.directive('validate', {
// vm对象,就是组件
const vm = vnode.context;
// 获得参数绑定的参数,就是规则对象
const validate = binding.value;
// 获得数据的key
const dataKey = Object.keys(binding.modifiers)[0];
});
el.addEventListener('change', (e) => {
try {
// 事件触发的input标签名
const changeElName = e.srcElement.name;
// 如果未设定规则不验证
if (validate[changeElName]) {
// 把表单的所有参数传入
validate[changeElName](vm[dataKey]);
// 检验成功添加成功的class
Util.removeClass(e.srcElement, 'success');
}
} catch (err) {
// 抛出异常添加失败的class
Util.addClass(e.srcElement, 'error');
}
});
// 有更好的方案
el.getElementsByTagName('button')[0].addEventListener('click', (e) => {
try {
// 遍历对象
Object.keys(vm[dataKey]).forEach((item) => {
if (validate[item]) {
validate[item](vm[dataKey]);
}
});
} catch (err) {
// 抛出错误提示
vm.loading({
text: '请检查参数',
});
vm.loaded(1000);
// 阻止submit
e.preventDefault();
}
});
amountRandomUpper({ budget, amountRandomUpper, amountRandomLower }) {
if (amountRandomUpper < 1) {
throw new Error('过小');
}
if (amountRandomUpper < amountRandomLower) {
throw new Error('过小');
}
if (amountRandomUpper > budget) {
throw new Error('过小');
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有