首页 > 其他分享 >Vue3+Element plus 实现表格可编辑

Vue3+Element plus 实现表格可编辑

时间:2024-11-29 14:21:49浏览次数:6  
标签:const 05 value Element plus Vue3 id tableData row

 

<template>
    <div>       <el-button type="primary" @click="handleAdd">         新增       </el-button>       <el-button type="primary" @click="handleAdd10">         新增10个点表       </el-button>       <el-button type="primary" @click="handleClean">         清空       </el-button>     </div>     <div>         <el-table         :data="tableData"         style="width: 100%"         border         @cell-click="showUnitInput"         >           <el-table-column prop="date" label="Date">             <template #default="{ row, column }">                 <el-input                     v-if="                     tableRowEditId === row.id &&tableColumnEditIndex === column.id"                     @blur="blurValueInput(row, column)"                     @keyup.enter="blurValueInput(row, column)"                     v-model="row.date"                 />                 <span v-else>{{ row.date }}</span>             </template>           </el-table-column>           <el-table-column prop="name" label="Name">             <template #default="{ row, column }">               <el-input                   v-if="                   tableRowEditId === row.id &&tableColumnEditIndex === column.id"                   @blur="blurValueInput(row, column)"                   @keyup.enter="blurValueInput(row, column)"                   v-model="row.name"               />               <span v-else>{{ row.name }}</span>           </template>           </el-table-column>           <el-table-column prop="address" label="Address">             <template #default="{ row, column }">               <el-input                   v-if="                   tableRowEditId === row.id &&tableColumnEditIndex === column.id"                   @blur="blurValueInput(row, column)"                   @keyup.enter="blurValueInput(row, column)"                   v-model="row.address"               />               <span v-else>{{ row.address }}</span>           </template>           </el-table-column>           <el-table-column prop="value" label="Value">             <template #default="{ row, column }">               <el-input                   v-if="                   tableRowEditId === row.id                   &&tableColumnEditIndex === column.id                   "                   @blur="blurValueInput(row, column)"                   @keyup.enter="blurValueInput(row, column)"                   v-model="row.value"               />               <span v-else>{{ row.value }}</span>           </template>         </el-table-column>         <el-table-column label="Operate">             <template #default="{ row }">               <el-button type="danger" link @click="handleDelete(row)">Delete</el-button>             </template>         </el-table-column>       </el-table>     </div>   </template>     <script setup>   import { ref,reactive } from 'vue'     let tableRowEditId = ref(null) // 控制可编辑的每一行   let tableColumnEditIndex = ref(null) //控制可编辑的每一列     const showUnitInput = (row, column) => {     //赋值给定义的变量     tableRowEditId.value = row.id //确定点击的单元格在哪行 如果数据中有ID可以用ID判断,没有可以使用其他值判断,只要能确定是哪一行即可     tableColumnEditIndex.value = column.id //确定点击的单元格在哪列   }   const blurValueInput = (row, column) => {     // tableRowEditId.value = null     // tableColumnEditIndex.value = null     //在此处调接口传数据   }   const tableData = reactive([     {       id:1,       date: '2016-05-03',       name: 'Tom',       address: 'No. 189, Grove St, Los Angeles',       value: '1'     },     {       id:2,       date: '2016-05-02',       name: 'Tom',       address: 'No. 189, Grove St, Los Angeles',       value: '2'     },     {       id:3,       date: '2016-05-04',       name: 'Tom',       address: 'No. 189, Grove St, Los Angeles',       value: '3'     },     {       id:4,       date: '2016-05-01',       name: 'Tom',       address: 'No. 189, Grove St, Los Angeles',       value: '4'     }   ])     const handleDelete = (row) => {     const index = tableData.indexOf(row)     if (index !== -1) {       tableData.splice(index, 1)     }   }     const handleAdd = () => {     tableData.unshift({       id:tableData.length+1,       date: '2016-05-05',       name: 'Tom',       address: 'No. 189, Grove St, Los Angeles',       value: tableData.length+1     });       }   const handleAdd10 = () => {     let iLen = tableData.length;     for(let i=0; i < 10; i++){                 tableData.unshift({         id:iLen+i + 1,         date: '2016-05-05',         name: 'Tom',         address: 'No. 189, Grove St, Los Angeles',         value: iLen+i + 1,       });     }
      }   const handleClean = () => {     let iLen = tableData.length;     for(let i=iLen - 1; i>= 0; i--){       console.log("handleClean--->i==",i);       tableData.splice(i,1);     }       }     </script>     <style>   </style>

标签:const,05,value,Element,plus,Vue3,id,tableData,row
From: https://www.cnblogs.com/yebinghuai/p/18576644

相关文章

  • PakePlus只要9分钟把网站打包成轻量跨平台APP,安装包仅5M左右
    开源地址:https://github.com/Sjj1024/PakePlus哔哩哔哩视频教程:PakePlus只需要9分钟就可以生成一个跨平台APP很简单的用Rust打包网页生成很小的桌面App......
  • SpringBoot集成MyBatis-Plus实现多数据源操作
    添加依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version></parent><dependencies>......
  • element动态表单验证一
       <template><el-form:model="dynamicValidateForm"ref="dynamicValidateForm"label-width="100px"class="demo-dynamicbg-whitepg-20"style="width:30%;"><el-form-item>&......
  • 手动实现vue3的select下拉框的滚动加载和虚拟滚动,简单易懂
    首先,滚动加载和虚拟滚动都是为了解决数据量大的渲染性能问题,但是也有区别,滚动加载并没有从根本上解决问题,只是滚动到可视区域底部动态加载,二虚拟滚动是永远只渲染固定数量(通常是可视区域内)的所以可以从根本上解决这种性能问题。如果只想了解滚动加载只看第一部分即可。这两种技......
  • 2024/11/27日 日志 关于Vue && Element
    Vue点击查看代码--Vue--·Vue是一套前端框架免除原生JavaScript中的DOM操作,简化书写--·基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,--将编程的关注点放在数据上--·官网:https://cn.vuejs.org----Vue快速入门--1.新建HTML页面,引入Vue.js文......
  • Paypal最新版本 paypal-server-sdk 使用案例(前端 Vue3 + 后端Spring Boot )
    背景在项目中对接Paypal支付,一开始在网上查了好久,发现资料少,而且陈旧,甚至我都没弄清楚我应该哪个SDK。我到maven中央仓库中,搜索com.paypal.sdk,能查出不少结果,据我所知,至少有三个sdk可以从后端访问到Paypal:paypal-core:非常陈旧,2016年就停止更新了,但网上还有一些关于它的教程......
  • MybatisPlus
    MybatisPlusMybatisPlus入门案例官方网站:https://baomidou.com/只做增强,引入不会对现有工程产生影响操作步骤引入依赖依赖中集成了Mybatis和mybatisPlus中的所有功能。<!--MybatisPlus--><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus......
  • 重生之我在Python中实现猜数字Plus版
    好久不见,甚是想念上次写了一个简易版猜数字,今天上上难度要求实现:利用随机函数random生成一个随机数,根据用户输入的数判断其与系统产生的随机数是否相等,并给出人性化提示引导用户继续猜测。另外,还需要统计猜测的次数,在程序结束前输出统计次数。【重要步骤提示】引入用于生......
  • Vue3 的基础使用
    Vue3的基础使用npminitvue@latestref赋值一个新的对象,那么响应式也会存在shallowRef只保留最顶层的响应式更新reactive赋值一个新的对象,失去响应性直接访问对象中的属性,当访问到某个响应式数组(Map这样的原生集合类型)中的ref元素时,不会解包shallowReactive只保留最......
  • vue3实现keep-alive一个组件(一个vue使用多个页面支持缓存)使用多个页面(多个路由)已解决
    代码<router-viewv-if="routerAlive"><template#default="{Component,route}"><keep-alive:include="getCaches"><component:is="formatComponentInstance(Component,route.name)......