详解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 相关文章推荐
Javascript事件热键兼容ie|firefox
Dec 30 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
深入理解JavaScript高级之词法作用域和作用域链
Dec 10 Javascript
JQuery中操作Css样式的方法
Feb 12 Javascript
js获取日期:昨天今天和明天、后天
Jun 11 Javascript
Vue+Element使用富文本编辑器的示例代码
Aug 14 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
bootstrap paginator分页插件的两种使用方式实例详解
Nov 14 Javascript
ES6小技巧之代替lodash
Jun 07 Javascript
node express使用HTML模板的方法示例
Aug 22 Javascript
JS实现小星星特效
Dec 24 Javascript
node.js使用stream模块实现自定义流示例
Feb 13 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的返回引用和局部静态变量
2015/06/04 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
css图片自适应大小
2007/11/28 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
vue如何判断dom的class
2018/04/26 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
python使用str &amp; repr转换字符串
2016/10/13 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
python实现FTP循环上传文件
2020/03/20 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
自我鉴定的范文
2013/10/03 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
小学生新年寄语
2014/04/03 职场文书
经管应届生求职信范文
2014/05/18 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
2014迎接教师节演讲稿
2014/09/10 职场文书
农业项目合作意向书
2015/05/08 职场文书
学风建设主题班会
2015/08/17 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang