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 相关文章推荐
用js实现的抽象CSS圆角效果!!
May 03 Javascript
网上应用的一个不错common.js脚本
Aug 08 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
Sep 08 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
Javascript中valueOf与toString区别浅析
Mar 19 Javascript
与Math.pow 相反的函数使用介绍
Aug 04 Javascript
javascript学习笔记(七)Ajax和Http状态码
Oct 08 Javascript
socket.io实现在线群聊功能
Apr 07 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
Aug 27 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
Javascript 模拟mvc实现点餐程序案例详解
Dec 24 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
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
python matplotlib画图实例代码分享
2017/12/27 Python
python实现求特征选择的信息增益
2018/12/18 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
Python通过len函数返回对象长度
2020/10/22 Python
python opencv肤色检测的实现示例
2020/12/21 Python
如何执行一个shell程序
2012/11/23 面试题
三关爱志愿服务活动方案
2014/08/17 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
值班管理制度范本
2015/08/06 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
MySQL8.0的WITH查询详情
2021/08/30 MySQL
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL
python高温预警数据获取实例
2022/07/23 Python