VeeValidate在vue项目里表单校验应用案例


Posted in Javascript onMay 09, 2018

VeeValidate是什么:

VeeValidate是Vue.js的验证库,它有很多验证规则,并支持自定义规则。它基于模板,因此它与HTML5验证API相似并且很熟悉。您可以验证HTML5输入以及自定义Vue组件。它也是以本地化为基础构建的,实际上我们有大约44种语言由精彩的社区成员支持和维护。

本文包含VeeValidate包含以下几点应用:

1、基本安装使用

2、本地化支持

3、自定义规则和错误消息

4、验证HTML5输入和自定义Vue组件

5、统一提交按钮处理

先看看页面效果:

VeeValidate在vue项目里表单校验应用案例

如果要看gif效果的可以在我的github(https://github.com/HongqingCao/My-Code/tree/master/VeeValidate)观看,并提供有实例源码下载,下面步入主题:

基本安装使用

VeeValidate的使用支持两种方式: 一种是:NPM/yarn(npm install vee-validate --save), 一种是:CDN。

本文是以CDN的方式引用:

<script type="text/javascript" src="js/jquery-3.2.1.min.js" ></script>
  <script type="text/javascript" src="js/vue.min.js" ></script>
  <script type="text/javascript" src="js/vee-validate.min.js" ></script>
  <script type="text/javascript" src="js/zh_CN.js" ></script>

注释:引入了四个js文件,前面两个略讲,后面的两个分别是vee-validata和zh_CN中文语言包文件

html页面部分:

<div class="enroll" id="recommend-box">
        <div class="title">请填写您要荐购的书籍信息:</div>
        <div class="content">
          <div class="info infoa">
            <div class="group-input">
              <span class="a">书 名:</span>
              <input v-model="title" v-validate="'required'" data-vv-as="书名" type="text" name="title" placeholder="请输入推荐书名" />
            </div>
            <div class="errors" v-show="errors.has('title')" v-cloak>{{ errors.first('title') }}</div>
          </div>
          <div class="info infoa">
            <div class="group-input">
              <span class="a">作 者:</span>
              <input v-model="author" v-validate="'required'" data-vv-as="作者" type="text" name="author" placeholder="请输入作者" />
            </div>
            <div class="errors" v-show="errors.has('author')" v-cloak>{{ errors.first('author') }}</div>
          </div>
          <div class="info infoa">
            <div class="group-input">
              <span class="a">出版社:</span>
              <input v-model="publisher" v-validate="'required'" data-vv-as="出版社" type="text" name="publisher" placeholder="请输入出版社" />
            </div>
            <div class="errors" v-show="errors.has('publisher')" v-cloak>{{ errors.first('publisher') }}</div>
          </div>
          <div class="info infob">         
            <div class="group-input">
              <span class="a">出版年:</span>
              <input v-model="pubYear" v-validate="'required|pubYear|digits:4'" data-vv-as="出版年" type="text" name="pubYear" placeholder="请输入出版年" />
            </div>
            <div class="errors" v-show="errors.has('pubYear')" v-cloak>{{ errors.first('pubYear') }}</div>
          </div>
          <div class="info infob">
            <div class="group-input">
              <span class="a">语言类型:</span>
              <input v-model="type" v-validate="'required'" data-vv-as="语言类型" type="text" name="type" placeholder="语言类型" />
            </div>
            <div class="errors" v-show="errors.has('type')" v-cloak>{{ errors.first('type') }}</div>
          </div>
          <div class="info infob">
            <div class="group-input">
              <span class="a">ISBN号:</span>
              <input v-model="isbn" v-validate="'required|isbn'" data-vv-as="ISBN号" type="text" name="isbn" placeholder="ISBN号" />
            </div>
            <div class="errors" v-show="errors.has('isbn')" v-cloak>{{ errors.first('isbn') }}</div>
          </div>

          <div class="info infob more">
            <div class="group-input">
              <span class="a">推荐理由:</span>
              <textarea v-model="remark" v-validate="'max:200'" data-vv-as="推荐理由" type="text" name="remark" placeholder="请输入推荐理由"></textarea>
            </div>
            <div class="errors" v-show="errors.has('remark')" v-cloak>{{ errors.first('remark') }}</div>
          </div>
           <div class="info info-btn">
             <div class="btton" @click="validateBeforeSubmit()">提交</div>
           </div>
         </div>
      </div>

注释:这边包含以下几个VeeValidate知识点:

1、input/textarea标签中的 v-validate、data-vv-as、name 属性。(v-model我这里是双向绑定,方便把这些参数传递给接口请求,不做过多介绍) 2、错误提示标签里面的 v-show="errors.has('remark')" 和**{{ errors.first('remark') }}**

v-validate:

v-validate指令添加到您希望验证的输入中,并确保您的输入具有name用于生成错误消息的属性。 然后,传递给指令一个rules字符串,其中包含由管道' |' 分隔的验证规则列表。比如上面的 出版年 份的校验,使用 required 这个选项是必填项, pubYear 以表明该字段必须为年的格式(当然这里是自定义的),digits:4,数字长度是4。要结合这两个规则,我们指定字符串值required|pubYear|digits:4的v-validate表达式的值。

data-vv-as:

当为这个输入生成任何错误消息时,它将使用该data-vv-as值而不是实际的字段名称,默认的错误提示都是英文,如果你设置了这个,错误提示字段名称它会提示data-vv-as值

v-show="errors.has('remark')

默认错误提示的标签不加载出来

errors.first('remark')

获取关于当前remark的第一个错误信息

js部分:

<script type="text/javascript">
    var IndexPage = "http://localhost:8080/xxxx.html"
    var AuthCode = "12131";
    $(function () {
      recommend(AuthCode);
    })
    VeeValidate.Validator.localize('zh_CN');
    Vue.use(VeeValidate);

    VeeValidate.Validator.localize({
      zh_CN: {
        messages: {
          required: function (name) { return name + '不能为空' },
        }
      }
    })
    VeeValidate.Validator.extend('isbn',{
      getMessage: function () { return " 请输入正确格式的isbn号" },
      validate: function (value) { return /^[\d-]*$/.test(value);}
    })
    VeeValidate.Validator.extend('pubYear', {
      getMessage: function () { return " 请输入正确的年份" },
      validate: function (value) { return /^(19|20)\d{2}$/.test(value); }
    })

    function recommend(AuthCode) {
      var classList = new Vue({
        el: '#recommend-box',
        data: function () {
          return {
            title: "",
            author: "",
            publisher: "",
            pubYear: "",
            type: "",
            remark: "",
            isbn: ""

          }
        },
        methods: {
          validateBeforeSubmit() {
            this.$validator.validateAll().then((result) => {
              if (result) {
                $.ajax({
                  url: '/xxxx',
                  data: {
                    Request: "xxxxx",
                    title: this.title,
                    author: this.author,
                    publisher: this.publisher,
                    pubYear: this.pubYear,
                    type: this.type,
                    remark: this.remark,
                    isbn: this.isbn,
                    certId: AuthCode
                  },
                  type: 'POST',
                  dataType: "json",
                  success: function (data) {
                    var msg = data.msg;
                    alert(msg);
                    window.location.href = IndexPage;
                  }
                });
                return;
              }
              alert("请输入完整推荐信息!")
            });
          }
        }
      })
    }
  </script>

好,接下来我们一起来读一下这个代码

VeeValidate.Validator.localize('zh_CN');
    Vue.use(VeeValidate);

注释:这以上代码的意思是 1、改变成zh_CN中午的语言环境,如果不改默认提示是英文 2、安装VeeValidate插件,也可以理解是初始化

VeeValidate.Validator.localize({
      zh_CN: {
        messages: {
          required: function (name) { return name + '不能为空' },
        }
      }
    })

注释:上代码修改默认提示语,name属性加不能为空,也就是必填项的非空判断

VeeValidate.Validator.extend('isbn',{
      getMessage: function () { return " 请输入正确格式的isbn号" },
      validate: function (value) { return /^[\d-]*$/.test(value);}
    })
    VeeValidate.Validator.extend('pubYear', {
      getMessage: function () { return " 请输入正确的年份" },
      validate: function (value) { return /^(19|20)\d{2}$/.test(value); }
    })

注释:上代码修改自定义规则 getMessage : 提示语。 validate: 就是匹配规则,通常就正则咯。

validateBeforeSubmit() {
   this.$validator.validateAll().then((result) => {
        if (result) {
           //这里写具体的接口请求
            alert("推荐成功!")
           return;
          }
           alert("请输入完整推荐信息!")
        }
     }

注释:上代码创建一个提交按钮事件,监听是否正常填写选项,实现校验

一个完整的校验应用案例到这里已经讲解的差不多了,小伙伴们可以根据自己的实际情况应用在自己的项目中,如果需要深入了解,可以移步到官网https://baianat.github.io/vee-validate/guide/。

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

Javascript 相关文章推荐
让插入到 innerHTML 中的 script 跑起来的实现代码
Jul 01 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
Apr 17 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
May 23 Javascript
JavaScript生成随机字符串的方法
Mar 19 Javascript
js 递归和定时器的实例解析
Feb 03 Javascript
JS实现最简单的冒泡排序算法
Feb 15 Javascript
js实现文字无缝向上滚动
Feb 16 Javascript
关于预加载InstantClick的问题解决方法
Sep 12 Javascript
Vue.js 动态为img的src赋值方法
Mar 14 Javascript
vue 之 .sync 修饰符示例详解
Apr 21 Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 Javascript
JavaScript创建表格的方法
Apr 13 Javascript
vue实现2048小游戏功能思路详解
May 09 #Javascript
vue中父子组件注意事项,传值及slot应用技巧
May 09 #Javascript
vue中的provide/inject的学习使用
May 09 #Javascript
详解Vue 多级组件透传新方法provide/inject
May 09 #Javascript
自定义vue组件发布到npm的方法
May 09 #Javascript
React Navigation 使用中遇到的问题小结
May 08 #Javascript
官方推荐react-navigation的具体使用详解
May 08 #Javascript
You might like
php牛逼的面试题分享
2013/01/18 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
jquery无缝向上滚动实现代码
2013/03/29 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
SVG实现时钟效果
2018/07/17 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
js实现简单点赞操作
2020/03/17 Javascript
详解vue 组件
2020/06/11 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
Apache如何部署django项目
2017/05/21 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
django 消息框架 message使用详解
2019/07/22 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
演讲稿祖国在我心中
2014/05/04 职场文书
学生党员公开承诺书
2014/05/28 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
公司财务会计主管应聘求职信
2014/09/26 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书