写一个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处理字幕文件

    始 下了部老电影,找到了相关的中英文字幕,奇怪的是,英文字幕能正常现实,中文字幕却不可以,我一度以为是Linux下播放器编码的问题,但是怎么更改设置都无效,而我以前在看其他电影时,中文字幕是正常的.所 ...

  2. Eigen的aligned_allocator

    今天看ORBSLAM2中的OptimizeEssentialGraph()函数时,对一句代码中的aligned_allocator不太清楚: vector<g2o::Sim3,Eigen::al ...

  3. PyTorch笔记之 scatter() 函数

    scatter() 和 scatter_() 的作用是一样的,只不过 scatter() 不会直接修改原来的 Tensor,而 scatter_() 会 PyTorch 中,一般函数加下划线代表直接在 ...

  4. java 泛型的内部原理:类型擦除以及类型擦除带来的问题

    一.Java泛型的实现方法:类型擦除前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首要前提是理解类型擦出(ty ...

  5. [CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)]飞行棋

    题目链接:https://www.cometoj.com/contest/59/problem/E?problem_id=2714 求期望并且一堆转移基本上就是期望dp了(叉腰 照常的设dp[i]表示 ...

  6. Could not load file or assembly system.data.sqlite.dll or one for it's depedencies

    最近做一个winform项目,因为数据库用的表很少,所以用的是轻量级数据库sqlite.sqlite的优点很多,但是他要分两个版本,32位或者64位,不能同时兼容. 我遇到的问题是,我在开发端用的是. ...

  7. js string相关方法

    1>concat()      //合并返回新的字符串 var a="么么么么",b="ssss"; a.concat(b) //"么么么么ss ...

  8. Windows10测试低版本IE方法

    前端开发工程师可能了解IETester是一款IE多版本兼容性测试软件,但是只支持Windows Xp,Vista,7,8系统,Windows10是不支持的,网上所说的开启.net framework ...

  9. js url传参,参数加密

    前台 function encode64(input) { var output = ""; var base = new Base64(); var output = base. ...

  10. netcore项目使用swagger开发

    首先我创建一个netcore项目,我使用的工具是vs2019 这里需要注意的是,看情况选择是否开启身份验证,一般是没有需求的,这里因为我是测试使用所以需要取消勾兑为https配置,并且我没有启用doc ...