当前位置: 首页 > 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、当发现校验一直不通过时可以查看控制台打印的的结果,看哪个校验没通过

校验不通过

 

 

http://www.lryc.cn/news/236803.html

相关文章:

  • 系统移植-uboot
  • 使用FFmpeg合并多个ts视频文件转为mp4格式
  • 大模型之十二十-中英双语开源大语言模型选型
  • .Net6 部署到IIS示例
  • 轻松搭建短域名短链接服务系统,可选权限认证,并自动生成证书认证把nginx的http访问转换为https加密访问,完整步骤和代码
  • JS 日期格式化
  • 右键菜单和弹出菜单的区别
  • 查询数据库DQL
  • SpringBoot中文乱码问题解决方案
  • 京东联盟flutter插件使用方法
  • python电影数据可视化分析系统的设计与实现【附源码】
  • SQLMAP --TAMPER的编写
  • 美国服务器:全面剖析其主要优点与潜在缺点
  • 验证二叉搜索树
  • Ubuntu 18.04无网络连接的n种可能办法
  • MIUI查看当前手机电池容量
  • 链动2+1模式:创新营销引领白酒产业新潮流
  • openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库
  • UE 视差材质 学习笔记
  • openfeign整合sentinel出现异常
  • Java的继承
  • 十二、Docker的简介
  • 卷积神经网络(CNN)多种图片分类的实现
  • 【备忘录】Docker容器、镜像删除与资源清理命令
  • 使用 Splashtop 的开放 API 简化 IT 工作流程
  • 使用requests库进行网络爬虫:IP请求错误的解决方法
  • Web之CSS笔记
  • CentOS to KeyarchOS 系统迁移体验
  • 如何从零开始制作一本企业宣传画册?
  • Android问题笔记四十六:解决open failed: EACCES (Permission denied) 问题