视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Vue from-validate 表单验证的示例代码
2020-11-27 22:29:03 责编:小采
文档


前言

需要进行表单数据验证,原先才用html5来完成验证,但是效果很差,也不够灵活,所以需要进行自定义的表单验证,网上的插件都太过庞大,项目并没有这么多的需求。
那让我们自己来写一个吧!

知识准备

vue的自定义指令

具体可以看官方手册,连接如下:https://vuejs.org/v2/guide/custom-directive.html

总的来说就是可以帮你在指定的钩子函数中跳用你的函数,参数(el,binding, vnode)

  • el: 绑定的dom
  • binding: 指令的各项属性
  • vnode: Vue 编译生成的虚拟节点
  • 开始

    1、指令的申明

    需要注意的是参数在背绑定上后不会被所以要才用闭包的方式

    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>

    2、解析参数

    Vue.directive('validate', {
     // vm对象,就是组件
     const vm = vnode.context;
     // 获得参数绑定的参数,就是规则对象
     const validate = binding.value;
     // 获得数据的key
     const dataKey = Object.keys(binding.modifiers)[0];
    });

    3、输入内容改变时进行规则验证

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

    4、在提交时对所有数据进行校验

    // 有更好的方案
    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();
     }
    });
    

    5、校验规则实例

    amountRandomUpper({ budget, amountRandomUpper, amountRandomLower }) {
     if (amountRandomUpper < 1) {
     throw new Error('过小');
     }
     if (amountRandomUpper < amountRandomLower) {
     throw new Error('过小');
     }
     if (amountRandomUpper > budget) {
     throw new Error('过小');
     }
    }
    

    结束

    这当中还是存在很多问题,有什么好的建议希望可以指出

    下载本文
    显示全文
    专题