在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>

二、运行效果

目录
相关文章
|
5天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
107 64
|
5天前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
|
17天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
5天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
19 8
|
5天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
18天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
18天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
JavaScript
Vue的非父子组件之间传值
全局事件总线 一种组件间通信的方式,适用于任意组件间通信
|
缓存 JavaScript 前端开发
Vue Props、Slot、v-once、非父子组件间的传值....
Vue Props、Slot、v-once、非父子组件间的传值....
84 0
|
JavaScript
Vue中父子组件传值
先在⽗组件中给⼦组件的⾃定义属性绑定⼀个⽗组件的变量