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

vue3父组件提交校验多个子组件

实现功能:在父组件提交事件中校验多个子组件中的form

父组件:

<script setup lang="ts">import {ref, reactive} from 'vue'import childForm from './childForm.vue'import childForm2 from './childForm2.vue'let approvalRef = ref()let approvalRef2 = ref()let resultArr= reactive([])//存放子组件的数组let errListMsg =ref("")//用来存储错误提示//这个方法是固定的,用来创建 Promise 实例,为多个组件校验使用const checkForm = (formChild) =>{let result = new Promise((resolve,reject)=>{formChild.validate((valid,fields)=>{if (valid) {console.log('submit');resolve()}else{console.log('error');Object.keys(fields).forEach((v,index)=>{if (index==0) {const PropName = fields[v][0].fieldformChild.scrollToField(PropName)errListMsg.value = fields[v][0].message}})reject()}})})resultArr.push(result)}//提交按钮事件const taskFun = ()=>{//获取该子组件暴露出来的form 的 refconst approvalRefChild = approvalRef.value.formsconst approvalRefChild2 = approvalRef2.value.ruleFormRef//调用上面创建好的方法checkForm(approvalRefChild)checkForm(approvalRefChild2)Promise.all(resultArr).then((results)=>{console.log('这里是接口请求');//校验通过}).catch(err=>{//校验不通过提示console.log(errListMsg.value);})resultArr=[]//每次请求完要清空数组errListMsg.value=""//提示也需要清空}
</script>
<template><childForm ref="approvalRef"></childForm><childForm2 ref="approvalRef2"></childForm2><button @click="taskFun">提交</button>
</template>

子组件一:

这个是表格可以增删改的情况,对表格添加输入校验

<script setup lang="ts">import {ref, reactive} from 'vue'import type { FormInstance } from 'element-plus'const forms = ref<FormInstance>()let info:any = reactive({data:[{name:'1'}]})const formRules = reactive({name: [{ required: true, message: '请输入姓名', trigger: 'change' }],role: [{ required: true, message: '请选择', trigger: 'blur' }]})defineExpose({forms})
</script>
<template><el-form :model="info" ref="forms"><el-tableref="tableRef":data="info.data"border><el-table-column align="center" property="name" label="*姓名"><template #default="{row,$index}"><el-form-item :prop="`data[${$index}].name`" :rules="formRules.name"><el-input placeholder="请输入姓名" v-model="info.data[$index].name" /></el-form-item></template></el-table-column><el-table-column align="center" property="role" label="角色"><template #default="{row,$index}"><el-form-item :prop="`data[${$index}].role`" :rules="formRules.role"><el-input placeholder="请输角色" v-model="info.data[$index].role" /></el-form-item></template></el-table-column></el-table></el-form>
</template>

子组件二:

这个是普通的form表单情况

<template>第二个组件<el-formref="ruleFormRef":model="ruleForm":rules="rules"label-width="120px"class="demo-ruleForm":size="formSize"status-icon><el-form-item label="Activity name" prop="name"><el-input v-model="ruleForm.name" /></el-form-item></el-form></template><script lang="ts" setup>import { reactive, ref } from 'vue'import type { FormInstance, FormRules } from 'element-plus'interface RuleForm {name: string}const formSize = ref('default')const ruleFormRef = ref<FormInstance>()const ruleForm = reactive<RuleForm>({name: 'Hello'})const rules = reactive<FormRules<RuleForm>>({name: [{ required: true, message: '请输入Activity name', trigger: 'blur' },{ min: 3, max: 5, message: '长度再3-5位', trigger: 'blur' },]})defineExpose({ruleFormRef})</script>

注意:

1、子组件中的form要添加ref属性,并使用defineExpose暴露出去,这样父组件才能获取到子组件中的ref,才能进行校验

2、当对表格输入内容做校验时prop和v-model绑定的是同一个才能校验通过

3、当发现校验一直不通过时可以查看控制台打印的的结果,看哪个校验没通过

校验不通过

 

 

相关文章:

  • Python通过selenium调用IE11浏览器报错解决方法
  • 网络知识学习(笔记二)
  • KaiwuDB 监控组件及辅助 SQL 调优介绍
  • 04.webpack中css的压缩和抽离
  • 数据结构【栈】
  • Boost获取当前时间并格式化为字符串
  • 宏集新闻 | 虹科传感器事业部正式更名为宏集科技
  • 虚拟摇杆OnJoystickMove未被调用,角色不移动
  • PaddleDetection训练目标检测模型
  • 科技的成就(五十三)
  • Vatee万腾外汇市场新力量:vatee科技决策力
  • 蓝桥杯算法双周赛心得——迷宫逃脱(记忆化搜索)
  • 13、深度学习之神经网络
  • 在Jupyter Lab中使用多个环境,及魔法命令简介
  • 【MATLAB源码-第86期】基于matlab的QC-LDPC码性能仿真,输出误码率曲线。
  • ES6指北【2】—— 箭头函数
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • CentOS7 安装JDK
  • Druid 在有赞的实践
  • JavaScript创建对象的四种方式
  • leetcode98. Validate Binary Search Tree
  • PAT A1120
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Tornado学习笔记(1)
  • vuex 笔记整理
  • 关于extract.autodesk.io的一些说明
  • 和 || 运算
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 京东美团研发面经
  • 看域名解析域名安全对SEO的影响
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​2021半年盘点,不想你错过的重磅新书
  • ​插件化DPI在商用WIFI中的价值
  • (2)nginx 安装、启停
  • (python)数据结构---字典
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (二)学习JVM —— 垃圾回收机制
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)计算机毕业设计大学生兼职系统
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • .bat文件调用java类的main方法
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 设计一套高性能的弱事件机制
  • .net6使用Sejil可视化日志
  • .net访问oracle数据库性能问题
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • [AIGC codze] Kafka 的 rebalance 机制
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [cb]UIGrid+UIStretch的自适应
  • [CERC2017]Cumulative Code
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)