详解vue-validator(vue验证器)


Posted in Javascript onJanuary 16, 2017

官方文档:http://vuejs.github.io/vue-validator/zh-cn/index.html

github项目地址:https://github.com/vuejs/vue-validator

单独使用vue-validator的方法见官方文档,本文结合vue-router使用。

安装验证器

不添加自定义验证器或者无需全局使用的公用验证器,在main.js中安装验证器,使用 CommonJS 模块规范, 需要显式的使用 Vue.use() 安装验证器组件。

import Validator from 'vue-validator'
Vue.use(Validator)

与 vue-router 同时使用,必须在调用 router#map, router#start 等实例方法前安装验证。

若要自定义验证器,建一个js文件,在该文件中安装验证器组件。例如:validation.js

import Vue from 'vue'
import Validator from 'vue-validator'
Vue.use(Validator)
//自定义验证器

自定义验证器

官方提供的api如下

  • input[type="text"]
  • input[type="radio"]
  • input[type="checkbox"]
  • input[type="number"]
  • input[type="password"]
  • input[type="email"]
  • input[type="tel"]
  • input[type="url"]
  • select
  • textarea

但是以上的不一定满足我们的需求,这时就需要用到另一个全局api,用于注册和获取全局验证器。

Vue.validator( id, [definition] )

示例  定义validation.js  内容如下

import Vue from 'vue'
import Validator from 'vue-validator'
Vue.use(Validator)
//自定义验证器
//添加一个简单的手机号验证 
//匹配0-9之间的数字,并且长度是11位
Vue.validator('tel', function (val) {
 return /^[0-9]{11}$/.test(val)
});
//添加一个密码验证
//匹配6-20位的任何字类字符,包括下划线。与“[A-Za-z0-9_]”等效。
Vue.validator('passw', function (val) {
 return /^(\w){6,20}$/.test(val)
});

使用验证器

验证器语法

<validator name="validation">
  <input type="text" v-model='comment' id='comment' v-validate:comment="{ minlength: 3, maxlength: 15 }">
  <div>
   <span v-show="$validation.comment.minlength">不得少于3个字符</span>
   <span v-show="$validation.comment.maxlength">不得大于15个字符</span>
  </div>
 </validator>

默认情况下,vue-validator 会根据 validator 和 v-validate 指令自动进行验证。然而有时候我们需要关闭自动验证,在有需要时手动触发验证。如果你不需要自动验证,可以通过 initial 属性或 v-validate 验证规则来关闭自动验证。如下:

<validator name="validation">
   <input type="text" v-model='comment' id='comment' v-validate:comment="{ minlength: 3, maxlength: 15 }" detect-change="off" initial='off'>
   <div>
    <span v-show="$validation.comment.minlength">不得少于3个字符</span>
    <span v-show="$validation.comment.maxlength">不得大于15个字符</span>
   </div>
</validator>

Terminal 指令问题

<validator name="test_validator">
  <!-- @invalid:valid的逆 ,表示验证不通过 -->
  <input @invalid="passwInvalid" @valid="passwok" type="password" v-model='passw' id='passw' v-validate:passw="['passw']" detect-change="off" initial='off' placeholder='请输入密码'>
  <input @invalid="passwInvalid" @valid="passwok" type="password" v-model='passw2' id='passw2' v-validate:passw2="['passw']" detect-change="off" initial='off' placeholder='请输入密码'>
</validator>
<script>
//若是在main.js中导入 无需再次导入
//此处导入的是上面代码的validation.js
import validator from '../validator/validation'
export default{
  data(){
    return{
      comment:'',
      passw:'',
      passw2:''
    }
  },
  methods:{
    passwInvalid(){
      alert('只能输入6-20个字母、数字、下划线');
    },
    passwok(){
      //alert('验证码符合规范')
    }
  }
}
</script>

示例:用户注册验证

用了一个组件来显示提示信息

toast.vue

<template>
  <div v-show="toastshow" transition="toast" class="toast font-normal">
    {{toasttext}}
  </div>
</template>
<script>
export default{
  props:{
    //是否显示提示
    toastshow:{
      type:Boolean,
       required: false,
      default:function(){
        return false;
      }
    },
    //提示的内容
    toasttext:{
      type:String,
      required: false,
      default:function(){
        return 'no message';
      }
    },
    //显示的时间
    duration: {
      type: Number,
      default:3000,//默认3秒
      required:false
    }    
  },
  ready() {
    
  },
  watch:{
    toastshow(val){
      if (this._timeout) clearTimeout(this._timeout)
      if (val && !!this.duration) {
       this._timeout = setTimeout(()=> this.toastshow = false, this.duration)
      }
    }
  }
}
</script>
<style>
  .toast{
    position:absolute;
    left:50%;
    margin-left:-25%;
    bottom:30px;
    display:block;
    width:200px;
    height:auto;
    text-align:center;
    color:white;
    background-color:rgba(0,0,0,0.5);
    border-radius:10px;
    z-index:10;
    transform:scale(1);
    padding:5px;
  }
  .toast-transition{
    transition: all .3s ease;
  }
  .toast-enter{
    opacity:0;
    transform:scale(0.1);
  }
  .toast-leave{
    opacity:0;
    transform:scale(0.1);
  }
</style>

注册用户:假如我们需要填写手机号和输入两次密码

<template>
  <div class='register-box'>
    <!-- 组件:用于显示提示信息 -->
    <Toast :toastshow.sync="toastshow" :toasttext="toasttext"></Toast>
    <validator name="validation_register1">
    <div class='register1'>
      <div class='pd05'>
      <input @invalid="telonInvalid" initial="off" detect-change="off" v-model="telphone" id="telphone" type="tel" class='phone-number' v-validate:telphone="['tel']" placeholder='请输入手机号码'>
      </div>
      <div class='pd05'>
        <input @invalid="passwInvalid" v-model="passw1" initial="off" detect-change="off" id="passw1" type="password" v-validate:passw1="['passw']" class='password-number' placeholder='请输入密码'>
      </div>
      <div class='pd05'>
        <input @invalid="passwInvalid" v-model="passw2" initial="off" detect-change="off" id="passw2" type="password" v-validate:passw2="['passw']" class='password-number' placeholder='请输入密码'>
      </div>
      <a class='greenBtn' v-on:click='register_user()'>下一步</a>
    </div>
    </validator>
  </div>
</template>
<script>
//导入validation.js 此处的validation.js就是上文中validation.js的内容
import validator from '../validator/validation';
//导入显示提示信息的组件
import Toast from '../components/toast.vue';
export default{  
  components: {
    //注册组件
     Toast
   },
  data(){
    return{
      telphone:'',//电话号码
      toastshow:false,//默认不现实提示信息
      toasttext:'',//提示信息内容
      passw1:'',//首次输入密码
      passw2:''//再次输入密码
    }
  },
  methods:{
    //手机号验证失败时执行的方法
    telonInvalid(){
      //设置提示信息内容
      this.$set('toasttext','手机不正确');
      //显示提示信息组件
      this.$set('toastshow',true);
    },
    //密码验证失败时执行的方法
    passwInvalid(){
      this.$set('toasttext','只能输入6-20个字母、数字、下划线');
      this.$set('toastshow',true);
    },  
    register_user(){
      var that = this;
      var telephones = that.$get('telphone');
      var pw1 = that.$get('passw1');
      var pw2 = that.$get('passw2') 
      that.$validate(true, function () {      
        if (that.$validation_register1.invalid) {
          //验证无效
           that.$set('toasttext','请完善表单');
           that.$set('toastshow',true);
        }else{
           that.$set('toasttext','验证通过');
           that.$set('toastshow',true);
           //验证通过做注册请求
           /*that.$http.post('http://192.168.30.235:9999/rest/user/register',{'account':telephones,'pwd':pw1,'pwd2':pw2}).then(function(data){
            if(data.data.code == '0'){
              that.$set('toasttext','注册成功');
               that.$set('toastshow',true);
            }else{
              that.$set('toasttext','注册失败');
               that.$set('toastshow',true);
            }
          },function(error){
            //显示返回的错误信息
            that.$set('toasttext',String(error.status));
            that.$set('toastshow',true);
          })*/
        }
      })
      
    }
  }
}
</script>
<style>
.register-box{
  padding: 10px;
}
.pd05{
  margin-top: 5px;
}
.greenBtn{
  width: 173px;
  height: 30px;
  text-align: center;
  line-height: 30px;
  background: red;
  color: #fff;
  margin-top: 5px;
}
</style>

若点击下一步,会提示“请完善表单”,因为验证不通过;若是文本框获得焦点后失去焦点则会提示相应的错误信息;若内容填写正确,则会提示验证通过并发送相应的请求。

效果如图

详解vue-validator(vue验证器)

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

Javascript 相关文章推荐
js里怎么取select标签里的值并修改
Dec 10 Javascript
jqGrid中文文档之选项设置
Dec 02 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 jQuery
vue中$set的使用(结合在实际应用中遇到的坑)
Jul 10 Javascript
详解webpack-dev-server使用方法
Sep 14 Javascript
浅析Vue 防抖与节流的使用
Nov 14 Javascript
vue 判断元素内容是否超过宽度的方式
Jul 29 Javascript
js实现搜索提示框效果
Sep 05 Javascript
详解JS WebSocket断开原因和心跳机制
May 07 Javascript
JavaScript中document.activeELement焦点元素介绍
Nov 27 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
Jan 16 #Javascript
webpack入门必知必会
Jan 16 #Javascript
angular+ionic 的app上拉加载更新数据实现方法
Jan 16 #Javascript
jQuery实现简易的输入框字数计数功能示例
Jan 16 #Javascript
谈谈Vue.js——vue-resource全攻略
Jan 16 #Javascript
Javascript的this用法
Jan 16 #Javascript
jQuery向webApi提交post json数据
Jan 16 #Javascript
You might like
PHP file_exists问题杂谈
2012/05/07 PHP
Yii核心验证器api详解
2016/11/23 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
JS表单传值和URL编码转换
2018/03/03 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
Python实现的石头剪子布代码分享
2014/08/22 Python
python处理数据,存进hive表的方法
2018/07/04 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
如何通过命令行进入python
2020/07/06 Python
python IP地址转整数
2020/11/20 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
会计专业毕业生自荐信范文
2013/12/20 职场文书
室内设计专业自荐信
2014/05/31 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript