Vee-validate 父组件获取子组件表单校验结果的实例代码


Posted in Javascript onMay 20, 2019

vee-validate 是为 Vue.js 量身打造的表单校验框架,允许您校验输入的内容并显示对应的错误提示信息。它内置了很多常见的校验规则,可以组合使用多种校验规则,大部分场景只需要配置就能实现开箱即用,还支持自定义正则表达式。而且支持 40 多种语言,对本地化、多语言支持非常友好。

国内饿了么团队开源项目 Element UI 就用到了 vee-validate

vee-validate官网:https://baianat.github.io/vee-validate/

使用方法

可查看官网文档(https://baianat.github.io/vee-validate/)或者查看这一篇文章(https://blog.givebest.cn/javascript/2019/04/20/vue.js-nuxt.js-use-vee-validate.html)。

组件内使用 Vee-validate

子组件

<template>
 <div>
 <input
  placeholder="请输入姓名"
  v-model="username"
  name="username"
  v-validate="'required'"
  :error-message="errors.first('username')"
 />
 </div>
</template>

<script>
export default {
 name: "Username",
 data() {
 return {
  username: ''
 }
 },
 methods: {
 // 表单校验
 validateForm() {
  return this.$validator.validateAll();
 },
 }
};
</script>

父组件

<template>
 <div>
 <Username ref="usernameComponent" />
 <Password ref="passwordComponent" />

 <div>
  <button @click="onSubmit">提交校验</button>
 </div>
 </div>
</template>

<script>
import Username from "~/components/username.vue"
import Password from "~/components/password.vue"

export default {
 components: {
 Username,
 Password
 },
 data() {
 return {}
 },
 methods: {
 onSubmit (e) {
  e.preventDefault() // 阻止默认事件

  // 父组件触发子组件校验,并通过 Promise 返回值
  let vf1 = this.$refs.usernameComponent.validateForm()
  let vf2 = this.$refs.passwordComponent.validateForm()

  // 提交表单前,校验所有子组件,全部通过才允许下面操作
  Promise.all([vf1, vf2]).then(result => {
  // 有一个组件未通过,就提示错误信息
  if (result.indexOf(false) > -1) {
   console.log("全部校验未通过")
   return
  }

  // 校验全部通过处理
  console.log("全部校验通过")
  })
 },
 }
};
</script>

总结

其实组件内使用 Vee-validate 校验很方便,主要问题可能是父组件怎么触发子组件内的校验,并获取校验结果。这里用到 Vue.js 里的 ref 特性,给子组件赋值一个 ID 引用,然后就可以使用 this.$refs.childComponent 获得子组件实例引用,再分别调起子组件写好的校验方法,如:

/**
父组件触发子组件校验,并通过 Promise 返回值
*/
let vf1 = this.$refs.usernameComponent.validateForm() // 父组件调用 usernameComponent 组件里的 validateForm 方法
let vf2 = this.$refs.passwordComponent.validateForm() // 父组件调用 passwordComponent 组件里的 validateForm 方法

然后通过 Promise.all 获取全部子组件校验结果后,再根据结果来判断,是否全部通过,分别做出不同处理。

// 提交表单前,校验所有子组件,全部通过才允许下面操作
Promise.all([vf1, vf2]).then(result => {
 // 有一个组件未通过,就提示错误信息
 if (result.indexOf(false) > -1) {
 console.log("全部校验未通过")
 return
 }

 // 校验全部通过处理
 console.log("全部校验通过")
})

总结

以上所述是小编给大家介绍的Vee-validate 父组件获取子组件表单校验结果的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
TextArea不支持maxlength的解决办法(jquery)
Sep 13 Javascript
jquery实现文本框数量加减功能的例子分享
May 10 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
Jun 05 Javascript
Bootstrap缩略图与警告框学习使用
Feb 08 Javascript
javascript 网页进度条简单实例
Feb 22 Javascript
Javascript中字符串相关常用的使用方法总结
Mar 13 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
Mar 24 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 jQuery
AngularJS的脏检查深入分析
Apr 22 Javascript
JavaScript面试出现频繁的一些易错点整理
Mar 29 Javascript
vue 自定义 select内置组件
Apr 10 Javascript
微信小程序入门之广告条实现方法示例
Dec 05 Javascript
React如何实现浏览器打印部分内容详析
May 19 #Javascript
koa-router路由参数和前端路由的结合详解
May 19 #Javascript
Vue.js中该如何自己维护路由跳转记录
May 19 #Javascript
利用Vue实现一个markdown编辑器实例代码
May 19 #Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
May 18 #Javascript
微信小程序实现搜索指定景点周边美食、酒店
May 18 #Javascript
vue+高德地图写地图选址组件的方法
May 18 #Javascript
You might like
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
js类的静态属性和实例属性的理解
2009/10/01 Javascript
input的focus方法使用
2010/03/13 Javascript
javascript preload&amp;lazy load
2010/05/13 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
自己封装的常用javascript函数分享
2015/01/07 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
用python写PDF转换器的实现
2020/10/29 Python
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
应届毕业生个人自我评价
2013/09/20 职场文书
军训学生自我鉴定
2014/02/12 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
个人年度总结报告
2015/03/09 职场文书
高中地理教学反思
2016/02/19 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
mysql的单列多值存储实例详解
2022/04/05 MySQL
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技