Vue表单验证插件Vue Validator使用方法详解


Posted in Javascript onApril 07, 2017

Vue-validator 是Vue的表单验证插件,供大家参考,具体内容如下

Vue版本: 1.0.24
Vue-validator版本: 2.1.3

基本使用

<div id="app">
 <validator name="validation">
  <form novalidate>
   <div class="username-field">
    <label for="username">username:</label>
    <input type="text" id="username" v-validate:username="['required']" />
   </div>
   <div class="comment-filed">
    <label for="comment">comment:</label>
    <input type="text" id="comment" v-validate:comment="{maxlength: 256}" />
   </div>
   <div class="errors">
    <p v-if="$validation.username.required">请输入你的名字</p>
    <p v-if="$validation.comment.maxlength">您的评论太长了</p>
   </div>
   <input type="submit" value="send" v-if="$validation.valid" />
  </form>
 </validator>
</div>


<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

 new Vue({
  el: '#app'
 });

</script>

将要验证的表单包裹在validator自定义元素指令中,而在要验证的表单控件元素的 v-validate 属性上绑定相应的校验规则。

验证结果会保存在组建实例的 $validation 属性下。 $validation 是由 validator 元素和 name 属性和 $ 前缀组件

验证结果结构

{
 // 表单整体验证
 "valid": false, // 字段校验是否通过 
 "invalid": true, // valid 取反
 "touched": false, // 校验字段所在元素获得通过焦点时返回true,否则返回false
 "untouched": true, // touched 取反
 "modified": false, // 当元素值与初始值不同时返回true,否则返回false
 "dirty": false, // 字段值改变过至少一次返回true,否则返回false 
 "pristine": true, // dirty 取反
 // 字段单一验证
 "username": {
  "required": true,
  "modified": false,
  "pristine": true,
  "dirty": false,
  "untouched": true, 
  "touched": false,
  "invalid": true,
  "valid": false
 },
 "comment": {
  "maxlength": false,
  "modified": false,
  "pristine": true,
  "dirty": false,
  "untouched": true,
  "touched": false,
  "invalid": false,
  "valid": true
 }
}

校验结果由两部分组成。表单整体校验结果和单个字段校验结果。

验证器语法

v-validate 指令语法:

v-validate[:field]=”array literal | object literfal | binding”

校验字段名field

field用来标识校验字段,之后可以用该字段来引用校验结果

v-validate 指令用来定义校验规则,其值可以是数组字面量,对象字面量,组件实例数组属性名。

数组字面量

当校验器不需要额外参数时,可以使用数组字面量形式,如 required 校验器,只要出现就带I表该校验器所在元素是必填项。

<div id="app">
 <validator name="validation">
  <form novalidate>
   Zip: <input type="text" v-validate:zip="['required']" /><br />
   <div>
    <span v-if="$validation.zip.required">邮政编码是必填项</span>
   </div>
  </form>
 </validator>
</div>

对象字面量

对象字面量语法适合需要额外参数的校验器。如限制输入长度的校验器 minlength,需要说明限制长度多少。

<div id="app">
 <validator name="validation">
  <form novalidate>
   ID: <input type="text" v-validate:id="{ required:true, minlength: 3, maxlength: 16 }" />
   <br />
   <div>
    <p v-if="$validation.id.required">ID不能为空</p>
    <p v-if="$validation.id.minlength">你的ID名字太短</p>
    <p v-if="$validation.id.maxlength">你的ID名字太长</p>
   </div>
   <input type="submit" value="send" v-if="$validation.valid" />
  </form>
 </validator>
</div>

还可以用 对象字面量语法通过 rule 字段来自定义验证规则

<div id="app">
 <validator name="validation">
  <form novalidate>
   ID: <input type="text" v-validate:id="{minlength: {rule: 3}, required: true, maxlength: {rule: 16}}" />
   <br />
   <div>
    <p v-if="$validation.id.required">ID不能为空</p>
    <p v-if="$validation.id.minlength">你的ID名字太短</p>
    <p v-if="$validation.id.maxlength">你的ID名字太长</p>
   </div>
   <input type="submit" value="send" v-if="$validation.valid" />
  </form>
 </validator>
</div>

实例数据属性

v-validate 的值可以是组建实例的数据属性。这样可以用来动态绑定校验规则。

<div id="app">
 <validator name="validation">
 <form novalidate>
  ID: <input type="text" v-validate:id="rules" /><br />
  <div>
   <p v-if="$validation.id.required">不能为空</p>
   <p v-if="$validation.id.minlength">你的ID太短</p>
   <p v-if="$validation.id.maxlength">你的ID太长</p>
  </div>
 </form>
 </validator>
</div>

<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

 new Vue({
  el: '#app',
  data: {
   rules: {
    required: true,
    minlength: 3,
    maxlength: 16
   }
  }
 });
 
</script>

内置校验规则

vue-validator 内置一些常用的验证规则:

  • required — 输入值不能为空
  • pattern — 必须匹配pattern表示的正则表达式
  • minlength — 输入值长度不能小于minlength表示的值
  • maxlength — 输入的值不能大于maxlength表示的值
  • min — 输入值不能小于min表示的值
  • max — 输入值不能大于max表示的值

与v-model同时使用

vue-validator会自动校验通过v-model动态设置的值。

<div id="app">
 <validator name="validation">
  <form novalidate>
   message: <input type="text" v-model="msg" v-validate:message="{required: ture, minlength: 8}" />
   <br />
   <p v-if="$validation.message.required">message不能为空</p>
   <p v-if="$validation.message.minlength">message输入太长位数</p>
  </form>
 </validator>
</div>

<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

 var vm = new Vue({
  el: '#app',
  data: {
   msg: ''
  }
 });
 
 setTimeout(function () {
  vm.msg = 'hello world!';
 }, 2000);
 
</script>

重置校验结果

通过在Vue组件实例上调用$resetValidation();方法来动态重置校验结果。

<div id="app">
 <validator name="validation">
  <form novalidate>
   <div class="username-field">
    <label for="username">username:</label>
    <input type="text" id="username" v-validate:username="['required']" />
   </div>
   <div class="comment-filed">
    <label for="comment">comment:</label>
    <input type="text" id="comment" v-validate:comment="{maxlength: 256}" />
   </div>
   <div class="errors">
    <p v-if="$validation.username.required">用户名不能为空</p>
    <p v-if="$validation.comment.maxlength">输入文字超过256个</p>
    <input type="submit" value="send" v-if="$validation.valid" />
    <button type="button" @click="onReset">Reset Validation</button>
   </div>
   <pre>{{$validation | json}}</pre>
  </form>
 </validator>
</div>

<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">
 
 new Vue({
  el: '#app',
  methods: {
   onReset: function () {
    this.$resetValidation();
   }
  }
 });
 
</script>

复选框checkbox

<div id="app">
 <validator name="validation">
  <form novalidate>
   <h1>调查</h1>
   <fieldset>
    
    <legend>请选择水果</legend>
    <input type="checkbox" id="apple" value="apple" v-validate:fruits="{
     required: { rule: true, message: requiredErrorMsg },
     minlength: { rule: 1, message: minlengthErrorMsg },
     maxlength: { rule: 2, message: maxlengthErrorMsg }
     }" />
     
    <label for="apple">Apple</label>
    <input type="checkbox" id="orange" value="orange" v-validate:fruits />
    <label for="orange">Orange</label>
    <input type="checkbox" id="grape" value="grape" v-validate:fruits />
    <label for="grape">Grape</label>
    <input type="checkbox" id="banana" value="banana" v-validate:fruits />
    <label for="banana">Banana</label>
    
    <ul class="errors">
     <li v-for="msg in $validation.fruits">
      <p>{{msg | json}}</p>
     </li>
    </ul>
   </fieldset>
  </form>
 </validator>
</div>

<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">
 
 new Vue({
  el: '#app',
  computed: {
   requiredErrorMsg: function () {
    return '请选择水果';
   },
   minlengthErrorMsg: function () {
    return '请选择至少1个水果!';
   },
   maxlengthErrorMsg: function () {
    return '请选择最多2个水果!';
   }
  }
 });
 
</script>

下拉类表select

<div id="app">
 
 <validator name="validation">
  <form novalidate>
   <select v-validate:lang="{required: true}">
    <option value="">请选择语言</option>
    <option value="javascript">javascript</option>
    <option value="php">php</option>
    <option value="node">node</option>
   </select>
   <div class="errors">
    <p v-if="$validation.lang.required">不能为空!</p>
   </div>
  </form>
 </validator>
 
</div>

<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">
 
 new Vue({
  el: '#app'
 });
 
</script>

校验状态class

各校验状态都有其对应的class(默认) 也可以自定义校验状态class

<validator name="validation" :classes="{touched: 'touehc-validator', dirty: 'dirty-validator'}">
 <label for="username">username</label>
 <<input type="text" id="username" :classes="{valid: 'valid-username', invalid: 'invalid-username'}" v-validate:username="{required: {rule: true, message: 'required you name!'}}">
</validator>
<!-- classes属性只能在validator元素或应用了v-validate的元素上使用有效 -->

分组校验

vue-validator支持分组校验。例如重复密码功能。

<div id="app">
 <validator name="validation" :groups="['passwordGroup']">
  <form novalidate>
   username: <input type="text" v-validate:username="['required']" /><br />
   password: <input type="password" v-validate:password="{ minlength: 8, required: true }" group="passwordGroup" /><br />
   comfirm password: <input type="password" v-validate:password-comfirm="{minlength: 8, required: true}" group="passwordGroup" />
   <div class="errors">
    <p v-if="$validation.username.required">用户名不能为空</p>
    <p v-if="$validation.password.required">密码不能为空</p>
    <p v-if="$validation.password.minlength">密码不能少于8位</p>
    <p v-if="$validation.password-comfirm.required">重复密码不能为空</p>
    <p v-if="$validation.password-comfirm.minlength">密码不能少于8位</p>
    <p v-if="$validation.passwordGroup.valid">密码不一致</p>
   </div>
  </form>
 </validator>
</div>

<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">
 
 new Vue({
  el: '#app'
 });
 
</script>

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中escape对应的C#解码函数 UrlDecode
Dec 16 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
May 03 Javascript
JS动态修改图片的URL(src)的方法
Apr 01 Javascript
jQuery通过Ajax返回JSON数据
Apr 28 Javascript
js实现类似MSN提示的页面效果代码分享
Aug 24 Javascript
JavaScript驾驭网页-CSS与DOM
Mar 24 Javascript
JS组件Bootstrap导航条使用方法详解
Apr 29 Javascript
终于实现了!精彩的jquery弹幕效果
Jul 18 Javascript
使用 Vue.js 仿百度搜索框的实例代码
May 09 Javascript
在vue项目中正确使用iconfont的方法
Sep 28 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
layui 动态设置checbox 选中状态的例子
Sep 02 Javascript
js 数字、字符串、布尔值的转换方法(必看)
Apr 07 #Javascript
利用js的闭包原理做对象封装及调用方法
Apr 07 #Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
Apr 07 #Javascript
socket.io实现在线群聊功能
Apr 07 #Javascript
JS+HTML5 FileReader对象用法示例
Apr 07 #Javascript
微信小程序实现图片轮播及文件上传
Apr 07 #Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
Apr 07 #Javascript
You might like
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
Javascript this关键字使用分析
2008/10/21 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
python类和继承用法实例
2015/07/07 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
tensorflow 查看梯度方式
2020/02/04 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
如何写出高性能的JSP和Servlet
2013/01/22 面试题
金鑫耀Java笔试题
2014/09/06 面试题
优秀中专生推荐信
2013/11/17 职场文书
关于礼仪的演讲稿
2014/01/04 职场文书
贷款承诺书范文
2014/05/19 职场文书
安全月宣传标语
2014/10/07 职场文书
自荐信格式范文
2015/03/04 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android