vue3編寫帶提示的表格組件功能
更新時間:2025年02月20日 11:19:31 作者:weixin_44165996
本文介紹了如何使用Vue 3編寫一個帶提示的表格組件,并假設每行都有一個保存按鈕,如果需要全部保存,還會加上驗證,感興趣的朋友一起看看吧
1、假設每行都有一個保存按鈕
<template> <el-table :data="tableData" class="w100"> <!-- 姓名列 --> <el-table-column prop="name" label="姓名"> <template #default="{ row }"> <el-form :model="row" :rules="rules" ref="form"> <el-form-item prop="name"> <el-input v-model="row.name" class="w100"/> </el-form-item> </el-form> </template> </el-table-column> <!-- 年齡列 --> <el-table-column prop="age" label="年齡"> <template #default="{ row }"> <el-form :model="row" :rules="rules" ref="form"> <el-form-item prop="age"> <el-input v-model="row.age" type="number" class="w100"/> </el-form-item> </el-form> </template> </el-table-column> <el-table-column prop="phone" label="電話號碼"> <template #default="{ row }"> <el-form :model="row" :rules="rules" ref="form"> <el-form-item prop="phone"> <el-input v-model="row.phone" maxlength="11" class="w100"/> </el-form-item> </el-form> </template> </el-table-column> <!-- 操作列 --> <el-table-column label="操作"> <template #default="{ row }"> <el-button type="primary" @click="handleSave(row)">保存</el-button> </template> </el-table-column> </el-table> </template> <script setup> import { ref } from 'vue'; // 表格數(shù)據(jù) const tableData = ref([ { name: '張三', age: 25 }, { name: '李四', age: 30 }, ]); // 驗證規(guī)則 const rules = { name: [ { required: true, message: '姓名不能為空', trigger: 'blur' }, { min: 2, max: 5, message: '姓名長度在 2 到 5 個字符', trigger: 'blur' }, ], age: [ { required: true, message: '年齡不能為空', trigger: 'blur' }, { type: 'number', min: 0, max: 120, message: '年齡必須在 0 到 120 之間', trigger:'blur' }, ], phone: [ { required: false, message: '電話號碼不能為空', trigger: 'blur' }, { pattern: /^1[3-9]\d{9}$/, message: '請輸入正確的手機號碼', trigger: 'blur' }, ], }; // 保存操作 const handleSave = (row) => { // 這里可以調用后端接口保存數(shù)據(jù) console.log('保存數(shù)據(jù):', row); }; </script> <style scoped> /* .el-input { width: 100px; } */ .w100{width: 100%;} /* .w200{width: 200px;} */ </style>
2、如果需要全部保存時加上驗證
<template> <div> <el-table :data="tableData" class="w100"> <!-- 姓名列 --> <el-table-column prop="name" label="姓名"> <template #default="{ row, $index }"> <el-form :model="row" :rules="rules" :ref="(el) => setFormRef(el, $index)"> <el-form-item prop="name"> <el-input v-model="row.name" class="w100"/> </el-form-item> </el-form> </template> </el-table-column> <!-- 年齡列 --> <el-table-column prop="age" label="年齡"> <template #default="{ row, $index }"> <el-form :model="row" :rules="rules" :ref="(el) => setFormRef(el, $index)"> <el-form-item prop="age"> <el-input v-model="row.age" type="number" class="w100"/> </el-form-item> </el-form> </template> </el-table-column> <!--電話號碼 --> <el-table-column prop="phone" label="電話號碼"> <template #default="{ row }"> <el-form :model="row" :rules="rules" :ref="(el) => setFormRef(el, $index)"> <el-form-item prop="phone"> <el-input v-model="row.phone" maxlength="11" class="w100"/> </el-form-item> </el-form> </template> </el-table-column> </el-table> <!-- 全部保存按鈕 --> <el-button type="primary" @click="handleSaveAll">全部保存</el-button> </div> </template> <script setup> import { ref } from 'vue'; // 表格數(shù)據(jù) const tableData = ref([ { name: '張三', age: 25 }, { name: '李四', age: 30 }, ]); // 表單引用 const formRefs = ref([]); // 設置表單引用 const setFormRef = (el, index) => { if (el) { // 根據(jù)索引更新對應的form ref formRefs.value[index] = el; console.log(el,index) } }; // 驗證規(guī)則 const rules = { name: [ { required: true, message: '姓名不能為空', trigger: 'blur' }, { min: 2, max: 5, message: '姓名長度在 2 到 5 個字符', trigger: 'blur' }, ], age: [ { required: true, message: '年齡不能為空', trigger: 'blur' }, { type: 'number', min: 0, max: 120, message: '年齡必須在 0 到 120 之間', trigger: 'blur' }, ], phone: [ { required: false, message: '電話號碼不能為空', trigger: 'blur' }, { pattern: /^1[3-9]\d{9}$/, message: '請輸入正確的手機號碼', trigger: 'blur' }, ], }; // 全部保存操作 const handleSaveAll = async () => { let isValid = true; // 遍歷所有表單并觸發(fā)驗證 for (let i = 0; i < formRefs.value.length; i++) { const formRef = formRefs.value[i]; console.log(formRef, 222); if (formRef) { try { await formRef.validate(); } catch (error) { isValid = false; console.error(`第 ${i + 1} 行數(shù)據(jù)驗證失敗:`, error); } } } // 如果所有表單驗證通過,保存數(shù)據(jù) if (isValid) { console.log('全部數(shù)據(jù)驗證通過,保存數(shù)據(jù):', tableData.value); // 這里可以調用后端接口保存數(shù)據(jù) } else { console.log('部分數(shù)據(jù)驗證失敗,請檢查輸入'); } }; </script> <style scoped> .w100 { width: 100%; } </style>
到此這篇關于vue3編寫帶提示的表格組件的文章就介紹到這了,更多相關vue3提示表格組件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于vue-admin-template模板連接后端改造登錄功能
這篇文章主要介紹了關于vue-admin-template模板連接后端改造登錄功能,登陸方法根據(jù)賬號密碼查出用戶信息,根據(jù)用戶id與name生成token并返回,userinfo則是對token進行獲取,在查出對應值進行返回,感興趣的朋友一起看看吧2022-05-05