在Vue3+ElementPlus项目中实现一个简单的新增/移除行记录的小组件

简介: 在Vue 3和Element Plus项目中创建一个支持新增和移除行记录的简单表格组件。

前言

有时需要一些前端需求就是支持表格编辑,点击新增一行或者移除一行。这不马上搞一个示例代码出来了吗?方便以后复制粘贴,提升工作效率~

一、示例代码

(1)/src/views/Example/ElEditableTable/index.vue

<template>
  <div class="table-container" style="padding: 100px;">

    <el-table
      border
      size="small"
      row-key="id"
      height="300"
      :data="tableList"
      highlight-current-row
    >
      <el-table-column label="序号" width="100" align="center">
        <template #default="scope">
          <span>{
  
  { scope.$index + 1 }}</span>
        </template>
      </el-table-column>
      <el-table-column prop="id" label="ID" width="180" align="center" />
      <el-table-column prop="rpmName" label="名称" width="auto" align="center" show-overflow-tooltip>
        <template #default="scope">
          <div class="table-container-td__name">
            <el-input size="small" v-model="scope.row.name" placeholder="请输入名称..." clearable></el-input>
          </div>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" width="150">
        <template #default="scope">
          <div>
            <el-button size="small" type="primary" plain @click="handleAddRow(scope.$index, scope.row, $event)" circle>
              <el-icon :size="15"><Plus /></el-icon>
            </el-button>

            <el-button size="small" type="danger" plain @click="handleRemoveRow(scope.$index, scope.row, $event)" circle>
              <el-icon :size="15"><Minus /></el-icon>
            </el-button>
          </div>
        </template>
      </el-table-column>
      <template #empty>
        <el-empty description="暂无数据"></el-empty>
      </template>
    </el-table>
  </div>
</template>

<script setup>
import {
    
     h, onMounted, onUnmounted, ref, getCurrentInstance, reactive, watch, nextTick } from 'vue'

// 代理对象
const {
    
     proxy } = getCurrentInstance()

// 表格数据
const tableList = ref([
  {
    
    
    'id': parseInt(Math.random() * 10000) + '-' + new Date().getTime(), // 1234-1701741061535
    'name': ''
  }
])

/**
 * 新增一行记录
 */
const handleAddRow = (index, row, event) => {
    
    
  tableList.value.splice(index + 1, 0, {
    
    
    'id': parseInt(Math.random() * 10000) + '-' + new Date().getTime(), // 1234-1701741061535
    'name': '',
  })
}

/**
 * 新增一行记录
 */
const handleRemoveRow = (index, row, event) => {
    
    
  if (tableList.value.length > 1) {
    
    
    tableList.value.splice(index, 1)
  } else {
    
    
    proxy.$message({
    
     type: 'warning', message: '必须保留一行哦!', duration: 2000 })
  }
}
</script>

二、运行效果

目录
相关文章
|
14天前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
124 2
|
11天前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
134 11
|
4月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
561 0
|
4月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
2月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
257 1
|
2月前
|
缓存 JavaScript UED
除了循环引用,Vue3还有哪些常见的性能优化技巧?
除了循环引用,Vue3还有哪些常见的性能优化技巧?
147 0
|
3月前
|
JavaScript
vue3循环引用自已实现
当渲染大量数据列表时,使用虚拟列表只渲染可视区域的内容,显著减少 DOM 节点数量。
98 0
|
4月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
213 1
|
JavaScript
Vue的非父子组件之间传值
全局事件总线 一种组件间通信的方式,适用于任意组件间通信
189 0
|
缓存 JavaScript 前端开发
Vue Props、Slot、v-once、非父子组件间的传值....
Vue Props、Slot、v-once、非父子组件间的传值....
159 0

热门文章

最新文章