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 覆盖和重载 函数
Sep 25 Javascript
javascript中encodeURI和decodeURI方法使用介绍
May 06 Javascript
javascript中拼接HTML字符串的最快、最好的方法
Jun 07 Javascript
Node.js开源应用框架HapiJS介绍
Jan 14 Javascript
js数组去重的5种算法实现
Nov 04 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 Javascript
详解Vue中过度动画效果应用
May 25 Javascript
Angularjs 手写日历的实现代码(不用插件)
Oct 18 Javascript
JS实现的JSON数组去重算法示例
Apr 11 Javascript
angular-tree-component的使用详解
Jul 30 Javascript
使用JS来动态操作css的几种方法
Dec 18 Javascript
js判断一个对象是数组(函数)的方法实例
Dec 19 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
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
js密码强度检测
2016/01/07 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Python读写压缩文件的方法
2020/07/30 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
vue路由实现登录拦截
2021/03/24 Vue.js
给民警的表扬信
2014/01/08 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
城南旧事电影观后感
2015/06/16 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL