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("")//用來存儲錯誤提示 //這個方法是固定的,用來創(chuàng)建 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].field formChild.scrollToField(PropName) errListMsg.value = fields[v][0].message } }) reject() } }) }) resultArr.push(result) } //提交按鈕事件 const taskFun = ()=>{ //獲取該子組件暴露出來的form 的 ref const approvalRefChild = approvalRef.value.forms const approvalRefChild2 = approvalRef2.value.ruleFormRef //調用上面創(chuàng)建好的方法 checkForm(approvalRefChild) checkForm(approvalRefChild2) Promise.all(resultArr).then((results)=>{ console.log('這里是接口請求'); //校驗通過 }).catch(err=>{ //校驗不通過提示 console.log(errListMsg.value); }) resultArr=[]//每次請求完要清空數組 errListMsg.value=""http://提示也需要清空 } </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-table ref="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-form ref="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、當發(fā)現校驗一直不通過時可以查看控制臺打印的的結果,看哪個校驗沒通過
校驗不通過
到此這篇關于vue3實現父組件提交校驗多個子組件的文章就介紹到這了,更多相關vue3父組件校驗多個子組件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue-extend和vue-component注冊一個全局組件方式
這篇文章主要介紹了vue-extend和vue-component注冊一個全局組件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11Vuejs入門教程之Vue生命周期,數據,手動掛載,指令,過濾器
本篇文章主要介紹了Vuejs入門教程之Vue生命周期,數據,手動掛載,指令,過濾器的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04Vue+OpenLayers?創(chuàng)建地圖并顯示鼠標所在經緯度(完整代碼)
這篇文章主要介紹了Vue+OpenLayers?創(chuàng)建地圖并顯示鼠標所在經緯度,本文使用的是高德地圖,結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-11-11第一次在Vue中完整使用AJAX請求和axios.js的實戰(zhàn)記錄
AJAX是現代Web開發(fā)的一個關鍵部分,盡管它一開始看起來令人生畏,但在你的武庫中擁有它是必須的,下面這篇文章主要給大家介紹了關于第一次在Vue中完整使用AJAX請求和axios.js的相關資料,需要的朋友可以參考下2022-11-11vue3?實現關于?el-table?表格組件的封裝及調用方法
這篇文章主要介紹了vue3?實現關于?el-table?表格組件的封裝及調用方法,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-06-06