写一个vue表单验证插件(vue-validate-easy)

需求

目标:简单易用可扩展

如何简单

开发者要做的

  1. 写了一个表单,指定一个name,指定其验证规则。
  2. 调用提交表单方法,可以获取验证成功后的数据。
  3. 调用重置表单方法重置表单
  4. 自定义验证方法

程序应该做的

  1. 获取表单元素,绑定事件
  2. 有输入时,获取表单值,使用开发者指定的规则进行验证,若验证错误给予错误提示。

实现方法

  • 获取原生表单元素,vue指令获取到的是包裹原生表单元素的外层元素,这里我使用data-type属性来获取原生表单元素
  • 验证规则,验证参数,自定义错误提示语 由 vue的指令值来获取
  • 提交时,我们需要一个表单标识,这里我使用了data-scope属性来对表单进行分组
  • 重置,通过data-scope重置整个表单

常用方法

  • 懒验证,通过.lazy指令修饰符
  • 远程验证, 通过async await
  • 延时验证, .deay指令修饰符,和data-delay属性
  • 表单主动验证,单字段主动验证
  • 单字段表单重置

可扩展

  • 错误消息自定义
  • 验证方法自定义
  • 错误提示处理自定义
  • 自定义表单元素(不借助原生元素)

完成后的使用代码

// 你只要指定 data-scope data-name data-type v-validate-easy 这四个属性的值,然后通过调用this.V.$submit(scope)就可以进行提交表单了
<form>
<div class="my-form-group" data-scope="register" data-name="email" data-type="input"
v-validate-easy="[['required','邮箱为必填项目'],['email']]">
<label>
<div class="label">邮箱</div>
<input class="input" type="text" spellcheck="false" placeholder="请输入邮箱"/>
</label>
</div> <div id="pwd" class="my-form-group" data-scope="register" data-name="password" data-type="input"
v-validate-easy="[['required','密码不能为空'],['password'],['maxLength',[32],'密码最长为32位']]">
<label>
<div class="label">密码</div>
<input class="input" type="text" spellcheck="false" placeholder="请再次输入密码"/>
</label>
</div> <div class="my-form-group" data-scope="register" data-name="password" data-type="input"
v-validate-easy="[['required','确认密码不能为空'],['equalTo',['pwd'],'密码输入不一致']]">
<label>
<div class="label">确认密码</div>
<input class="input" type="text" spellcheck="false" placeholder="请输入邮箱"/>
</label>
</div>
<div class="btn-group">
<button class="my-btn" @click.prevent="submit('register')">注册</button>
<button class="my-btn" @click.prevent="reset('register')">重置</button>
</div>
</form>
  methods: {
reset(scope) {
this.V.$reset(scope)
},
submit(scope) {
this.V.$submit(scope, (canSumit,data) => {
// canSumit为true时,则所有该scope的所有表单验证通过
if(!canSumit) return // 发送请求
axios({ url: '/test',data, method: 'post'})
.then(() => {
// 成功响应处理
})
.catch(() => {
// 错误处理
})
})
}
},

对自定义组件使用,就更加简洁

  <form>
<h3>用户登录</h3>
<my-input label="用户名" data-scope="login" data-name="username" v-validate-easy="[['required']]"></my-input>
<my-input label="密码" data-scope="login" type="password" data-name="pwd" v-validate-easy="[['required']]"></my-input> <div class="btn-group">
<button class="my-btn" @click.prevent="submit('login')">登录</button>
<button class="my-btn" @click.prevent="reset('login')">重置</button>
</div>
</form>

vue-validate-easy github地址

欢迎大家star,对该项目有什么问题和建议,欢迎提issue

vue-validate-easy 文档地址

写一个简单易用可扩展vue表单验证插件(vue-validate-easy)的更多相关文章

  1. Vue表单验证插件的制作过程

    一.表单验证模块的构成 任何表单验证模块都是由 配置――校验――报错――取值 这几部分构成的. 配置: 配置规则 和配置报错,以及优先级 校验: 有在 change 事件校验, 在点击提交按钮的时候校 ...

  2. Vue 表单验证插件

    verify github:https://github.com/liuyinglong/verifynpm:https://www.npmjs.com/package/vue-verify-plug ...

  3. 一个不错的vue表单验证插件

    github文档 用着不错,官方的文档例子很简单 <body> <div id="app"> <validator name="valida ...

  4. JQuery表单验证插件EasyValidator,超级简单易用!

    本插件的宗旨是:用户无需写一行JS验证代码,只需在要验证的表单中加入相应的验证属性即可,让验证功能易维护,可扩展,更容易上手. DEMO中已经包含了常用的正则表达式,可以直接复用,为了考虑扩展性,所以 ...

  5. nice-validator表单验证插件的简单使用

    前言 前端表单校验是过滤无效数据.假数据.有毒数据的第一步,是数据安全的第一道关卡,虽然我们不能100%相信客户端提交的数据(真正的校验还得在服务端进行),但设置前端表单校验也是至关重要的,自己写逻辑 ...

  6. jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...

  7. jQuery Validate 表单验证插件----利用jquery.metadata.js将校验规则直接写在class属性里面并定义错误信息的提示

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二. 添加一个另外一个插件jquery.metadata.js 并把校验规则写在控件里面 ...

  8. vue表单验证--veevalidate使用教程

    vue表单验证----vee-validate使用教程 官网:https://baianat.github.io/vee-validate/ 一.安装 npm install vee-validate ...

  9. jQuery Validate 表单验证插件----自定义一个验证方法

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...

随机推荐

  1. 如何让字典保持有序---Python数据结构与算法相关问题与解决技巧

    实际案例: 某编程竞赛系统,对参赛选手编程解体进行计时,选手完成题目后,吧该选手解体用时记录到字典中,以便赛后按选手名查询成绩 {'Lilei':(2,43),'HanMei':(5,52),'Jim ...

  2. JAVA AOP面向切面编程与动态代理

    1.静态代理和动态代理的概念:   在我的另一篇博文:Java 静态代理和动态代理 中有讲到,这里就不做赘述了. JDK动态代理它的好处理是可以为我们生成任何一个接口的代理类,并将需要增强的方法织入到 ...

  3. Node.js实战10:“流”是Node.js最强大的功能之一。

    流是Nodejs的高级应用,掌握流的使用,才能真正胜任NodeJS开发. Nodejs中,流是基于事件的API,用于管理和处理数据,而且效率很好! 什么是流? 流是一个抽象接口,Node 中有很多对象 ...

  4. leveldb memtable

    memtable常驻于内存,需要按照key进行排序,通常意义上的话,可以使用二叉查找树来实现,跟进一步可以使用红黑树保证树的平衡,但是leveldb中使用了另外的一种数据结构:跳表Skip List. ...

  5. struts框架中常用到的标签

    2.<constant name="struts.i18n.encoding" value="UTF-8" />     指定Web应用的默认编码集 ...

  6. wxpython菜单栏、子菜单栏、弹出菜单栏、状态栏小程序学习源代码分享

    #coding=utf-8 import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1, ...

  7. 7、前端知识点--关于Array.from详解

    1.Array.from()方法就是将一个类数组对象 或 可遍历对象 或 可迭代对象 转换成一个真正的数组.浅拷贝的数组实例. 2.那么,什么是类数组对象呢?所谓类数组对象,最基本的要求就是具有len ...

  8. ssm框架搭建整合测试

    下载各种jar包 mybatis下载 https://github.com/mybatis/mybatis-3/releases mysql驱动下载 http://mvnrepository.com/ ...

  9. CSS实现单行文本溢出显示省略号

    p { width:100px;//设定宽度 //以下三个属性设置均必不可少 white-space: nowrap; text-overflow:ellipsis; overflow:hidden; ...

  10. FCKEditor报java.lang.NullPointerException

    1.需要在 加value=“ ” <FCK:editor instanceName="replycontent" basePath="/fckeditor" ...