写一个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. JSONPath解析json

    JSONPath - 用于JSON的XPath 用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具. 考虑到接下来计划开发一个自动化测试平台,在 ...

  2. vue组件的watch属性

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. idea奇葩问题汇总

    1.用idea在tomcat里运行普通的springMVC项目,用nacos做为配置中心,通过@NacosValue来读取配置中心的值,配置了autoRefreshed = true但是不起作用,读取 ...

  4. 压缩图片工具类,压缩100KB以内拿走直接用

    最近遇到自拍上传图片过大问题,很烦恼,所以自己写了一个压缩图片的工具类使用,自测效果很不错,可以压缩到KB以内,像素还可以分辨清晰 下面Java代码奉上: import lombok.extern.s ...

  5. heaplog

    #ifdef _DEBUG #include <stdio.h> #include <stdlib.h> #include <string.h> #define _ ...

  6. 【sql server复制】不重新初始化快照的情况下新增表/存储过程/函数等

    转发自:https://www.cnblogs.com/datazhang/p/5498789.html sqlserver同步后在不重新初始化快照的情况下新增表        在已有事务复制中,时长 ...

  7. 打开虚拟机提示 无法获得vmci 驱动程序的版本:句柄无效

    我从另一台电脑复制过来虚拟机,提示如题. 找到  我的虚拟机的  *.vmx文件(如NeoKylin.vmx),其中有 vmci0.present = "TRUE",将TRUE改为 ...

  8. Python 的 time 模块导入及其方法

    时间模块很重要,Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能,讲解一下Python 的 time 模块导入及其方法. 1,time 模块导入 import time; # ...

  9. python 定义模块作用及分类

    python把一个功能的模块归类,简单来说,模块是一个由Python代码组成的文件.模块可以定义函数,类和变量. 模块还可以包括可运行的代码. 1,python模块的作用 提高代码的方便维护 使用模块 ...

  10. Log4Net 之走进Log4Net (四)

    原文:Log4Net 之走进Log4Net (四) 一.Log4net的结构 log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器) ...