当前位置: 首页 > news >正文

VUE2用elementUI实现父组件中校验子组件中的表单

需求是VUE2框架用elementUI写复杂表单组件,比如,3个相同功能的表单共用一个提交按钮,把相同功能的表单写成一个子组件,另一个父组件包含子组件的重复调用和一个提交按钮,并且要求提交时校验必填项。

注意:

1.validate函数不传参数就会返回一个promise

2.子组件中写了this.$refs.form?.map...是因为真实项目中el-form是进行了循环的,这里可以自定义修改

3.父组件中要用promise来处理调用子组件的方法

子组件:

<template><el-form ref="form" :model="formData" :rules="formRules" label-width="120px"><el-form-item label="姓名" prop="name"><el-input v-model="formData.name"></el-input></el-form-item><el-form-item label="邮箱" prop="email"><el-input v-model="formData.email"></el-input></el-form-item><!-- 其他表单项 --></el-form>
</template><script>
export default {data() {return {formData: {name: '',email: ''// 其他表单项},formRules: {name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],email: [{ required: true, message: '请输入邮箱', trigger: 'blur' }]// 其他表单项的校验规则}};},methods: {validateForm() {const validatePromises = this.$refs.form?.map(v => {return v.validate();});if (validatePromises) {return Promise.all(validatePromises).then(results => {// 检查结果数组,如果所有项都是 true,则返回 true,否则返回 falsereturn results.every(result => result);}).catch(() => {// 如果有任何验证 Promise 失败,则捕获错误return false;});} else {// 如果 this.$refs.form 不存在,直接返回 false 或抛出错误return false;}}}
};
</script>

 父组件

<template><div><FormComponent v-for="(ref,index) in formRefs" :key="index" :ref="ref"></FormComponent><el-button type="primary" @click="submitForms">提交</el-button></div>
</template><script>
import FormComponent from './FormComponent.vue';export default {data() {return {formRefs: []};},components: {FormComponent},mounted() {// 根据需要调用表单的次数,此处假设为10次for (let i = 0; i < 10; i++) {this.formRefs.push(`form${i + 1}`);}},methods: {async onSubmit() {// 1、pc端:一次性校验所有题Promise.all(this.formRefs?.map(v => {return this.$refs?.[v]?.[0]?.validateForm();})).then(res => {if (res?.every(v => v)) {const formDataList = this.formRefs?.map(v => {return this.$refs?.[v]?.[0]?.form;});// 2、提交问卷console.log('formDataList', formDataList);} else {// 找出所有校验不通过的表单const falseFormList = res.filter(v => !v);// TODO 自定义操作}}).catch(() => {this.$alert('请稍后重试', '提示', {dangerouslyUseHTMLString: true});});}}
};
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 讲讲 JVM 的内存结构(附上Demo讲解)
  • LVS集群及其它的NAT模式
  • (自用)网络编程
  • 华为配置蓝牙终端定位实验
  • Apache中使用SSI设置
  • 【网络安全科普】网络安全指南请查收
  • IDEA社区版使用Maven archetype 创建Spring boot 项目
  • 《从零开始学习Linux》——开篇
  • 高盛开源的量化金融 Python 库
  • 精通 mysqldumpslow:深度分析 MySQL 慢查询日志
  • Matlab-Simulink模型保存为图片的方法
  • Python应用爬虫下载QQ音乐歌曲!
  • html5——表单
  • SpringCloudAlibaba Nacos配置中心与服务发现
  • 为企业提升销售工作效率的工作手机管理系统
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • extjs4学习之配置
  • JavaScript异步流程控制的前世今生
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Rancher-k8s加速安装文档
  • STAR法则
  • sublime配置文件
  • TCP拥塞控制
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 普通函数和构造函数的区别
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何胜任知名企业的商业数据分析师?
  • 使用 QuickBI 搭建酷炫可视化分析
  • ionic异常记录
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 数据可视化之下发图实践
  • ​520就是要宠粉,你的心头书我买单
  • ​数据结构之初始二叉树(3)
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (每日一问)基础知识:堆与栈的区别
  • (三) diretfbrc详解
  • (一)Docker基本介绍
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)h264中avc和flv数据的解析
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core中的时区转换问题
  • .Net MVC4 上传大文件,并保存表单
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET技术成长路线架构图
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /bin/bash^M: bad interpreter: No such file or directory
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [000-01-011].第2节:持久层方案的对比