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';
    // 表格数据
    const tableData = ref([
      { name: '张三', age: 25 },
      { name: '李四', age: 30 },
    ]);
    // 验证规则
    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) => {
      // 这里可以调用后端接口保存数据
      console.log('保存数据:', 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';
    // 表格数据
    const tableData = ref([
      { name: '张三', age: 25 },
      { name: '李四', age: 30 },
    ]);
    // 表单引用
    const formRefs = ref([]);
    // 设置表单引用
    const setFormRef = (el, index) => {
      if (el) {
        // 根据索引更新对应的form ref
        formRefs.value[index] = el;
        console.log(el,index)
      }
    };
    // 验证规则
    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;
      // 遍历所有表单并触发验证
      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} 行数据验证失败:`, error);
          }
        }
      }
      // 如果所有表单验证通过,保存数据
      if (isValid) {
        console.log('全部数据验证通过,保存数据:', tableData.value);
        // 这里可以调用后端接口保存数据
      } else {
        console.log('部分数据验证失败,请检查输入');
      }
    };
</script>
<style scoped>
.w100 {
  width: 100%;
}
</style>

到此这篇关于vue3编写带提示的表格组件的文章就介绍到这了,更多相关vue3提示表格组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue3中的组合式 API示例详解

    Vue3中的组合式 API示例详解

    组合式 API 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件,这篇文章主要介绍了什么是Vue3的组合式 API,需要的朋友可以参考下
    2022-06-06
  • 在vue中完美使用ueditor组件(cdn)解读

    在vue中完美使用ueditor组件(cdn)解读

    这篇文章主要介绍了在vue中完美使用ueditor组件(cdn)解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 使用Vue写一个datepicker的示例

    使用Vue写一个datepicker的示例

    这篇文章主要介绍了使用Vue写一个datepicker的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • vue.js项目打包上线的图文教程

    vue.js项目打包上线的图文教程

    下面小编就为大家分享一篇vue.js项目打包上线的图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • vue3中使用ref获取dom的操作代码

    vue3中使用ref获取dom的操作代码

    ref在我们开发项目当中很重要的,在 Vue 中使用 ref 可以提高代码的可读性和维护性,因为它直接标识出了组件中需要操作的具体元素或组件实例,本文我将给大家带来的是vue3中用ref获取dom的操作,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-06-06
  • Vue组件更新数据v-model不生效的解决

    Vue组件更新数据v-model不生效的解决

    这篇文章主要介绍了Vue组件更新数据v-model不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • Vue使用pinia管理数据pinia持久化存储问题

    Vue使用pinia管理数据pinia持久化存储问题

    这篇文章主要介绍了Vue使用pinia管理数据pinia持久化存储问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • vue+element实现下拉菜单并带本地搜索功能示例详解

    vue+element实现下拉菜单并带本地搜索功能示例详解

    这篇文章主要介绍了vue+element实现下拉菜单并带本地搜索功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • vue如何使用moment处理时间戳转换成日期或时间格式

    vue如何使用moment处理时间戳转换成日期或时间格式

    这篇文章主要给大家介绍了关于vue如何使用moment处理时间戳转换成日期或时间格式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者vue具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • Vue中的动态路由匹配路由问题

    Vue中的动态路由匹配路由问题

    这篇文章主要介绍了Vue中的动态路由匹配路由问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论