• 技术文章 >web前端 >Vue.js

    详解vue验证器(vue-validator)的使用

    青灯夜游青灯夜游2020-11-05 17:57:09转载817

    官方文档: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>

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

    效果如图

    1.png

    相关推荐:

    2020年前端vue面试题大汇总(附答案)

    vue教程推荐:2020最新的5个vue.js视频教程精选

    更多编程相关知识,请访问:编程入门!!

    以上就是详解vue验证器(vue-validator)的使用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:博客园,如有侵犯,请联系admin@php.cn删除
    专题推荐:vue vue-validator
    上一篇:vue2.0子组件中怎么改变父组件中的值 ? 下一篇:vue2.0非父子组件间怎么进行通讯?
    大前端线上培训班

    相关文章推荐

    • 分析一下Vue.use的源码• vue如何实现局部刷新?(代码示例)• 详解vue中的数据初始化(initState)• vue.js中如何使用v-for以及怎么获取索引?• 详解Vue中动态添加类名的方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网