首页 > 其他分享 >vue3+ts利用el-table实现可编辑的表格

vue3+ts利用el-table实现可编辑的表格

时间:2023-01-06 14:55:55浏览次数:61  
标签:el const index age ts sex vue3 activeIndex userData

说明

在对表格数据进行操作时,如果数据项比较少,可通过自定义实现直接在表格中编辑。

界面展示

实现要点

  • 使用slot来自定义单元格,实现输入、选择等操作
  • 使用slot来自定义表头实现Add操作按钮在表头
  • 使用v-if与v-else实现编辑状态与查看状态按钮的切换

代码

<template>
    <div>
        <el-table :data="userData">
            <el-table-column label="Name" prop="name">
                <template #default="scope">
                    <el-input v-if="activeIndex == scope.$index" v-model="scope.row.name"></el-input>
                    <span v-else>{{ scope.row.name }}</span>
                </template>
            </el-table-column>
            <el-table-column label="Age" prop="age">
                <template #default="scope">
                    <el-input type="number" v-if="activeIndex == scope.$index" v-model="scope.row.age"></el-input>
                    <span v-else>{{ scope.row.age }}</span>
                </template>
            </el-table-column>
            <el-table-column label="Sex" prop="sex">
                <template #default="scope">
                    <el-select v-if="activeIndex == scope.$index" v-model="scope.row.sex">
                        <el-option label="female" value="female"></el-option>
                        <el-option label="male" value="male"></el-option>
                    </el-select>
                    <span v-else>{{ scope.row.sex }}</span>
                </template>
            </el-table-column>
            <el-table-column align="right" width="150">
                <template #header>
                    <el-button type="primary" @click="handleAdd">Add</el-button>
                </template>
                <template #default="scope">
                    <div v-if="activeIndex == scope.$index">
                        <el-button type="info" @click="handleSave">Save</el-button>
                    </div>
                    <div v-else>
                        <el-button type="success" @click="handleEdit(scope.$index)">Edit</el-button>
                        <el-popconfirm @confirm="handleDelete(scope.$index)" width="220" confirm-button-text="OK" cancel-button-text="No, Thanks" :icon="InfoFilled" icon-color="#626AEF" title="Are you sure to delete this?">
                            <template #reference>
                                <el-button type="danger">Delete</el-button>
                            </template>
                        </el-popconfirm>
                    </div>
                </template>
            </el-table-column>
        </el-table>
    </div>
</template>
<script setup lang="ts">
import { InfoFilled } from '@element-plus/icons-vue'
import { reactive, ref } from 'vue';
interface iUser {
    name: string;
    age: number;
    sex: string;
}
let userData: iUser[] = reactive([
    {
        name: 'nico',
        age: 18,
        sex: 'female'
    }
]);
let activeIndex = ref<number>(-1);
// 新增行
const handleAdd = function () {
    let item = {
        name: '',
        age: 0,
        sex: ''
    };
    userData.push(item);
    activeIndex.value = userData.length - 1;
};
// 编辑行
const handleEdit = (index: number) => {
    activeIndex.value = index;
};
// 保存行
const handleSave = () => {
    activeIndex.value = -1;
};
// 删除行
const handleDelete = function (index: number) {
    userData.splice(index, 1);
};
</script>

 

标签:el,const,index,age,ts,sex,vue3,activeIndex,userData
From: https://www.cnblogs.com/nicoz/p/17030470.html

相关文章

  • Docker Remote API未授权访问+docker逃逸导致Getshell漏洞复现
    漏洞介绍Docker是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包......
  • linux shell 用curl 发邮件
    echo"From:someone1<someone1@somesite1.com">somefile.txtecho"To:someone2<someone2@somesite2.com>;someone3<someone3@somesite3.com>;">>somefile.txte......
  • 23、electron 报Fatal error in V8: v8_ArrayBuffer_NewBackingStore When the V8 San
    electron报FatalerrorinV8:v8_ArrayBuffer_NewBackingStoreWhentheV8Sandboxisenabled,ArrayBufferbackingstoresmustbeallocatedinsidethesandboxa......
  • windows下springboot项目部署elk日志系统教程elasticsearch与logstash与kibana
    1.项目中加入依赖:compile'net.logstash.logback:logstash-logback-encoder:6.0'如果是maven项目的话:字符串中的冒号为隔断,第一个为groupid,第二个为artifactId,第三个为versi......
  • Struts--result详解
    Result:  1.result是action节点的子节点  2.result代表action方法执行后可能去的一个目的地  3.一个action节点可以配置多个result子节点  4.result的name......
  • 22、Electron常见动态链错误
    1、UncaughtError:DynamicLinkingError:Win32error126DLL引用的路径错误,检查下DLL的路径是否正确 2、UncaughtError:DynamicLinkingError:Win32error193......
  • bootstrap-select,selectpicker 用法详细:通过官方文档翻译
    bootstrap-select,selectpicker用法详细:通过官方文档翻译 用过selectpicker的都说好~但是网上中文的教程又找不到比较完整的用法,于是去官网看了下顺便弄过来翻译一......
  • element ui可拖拽dialog-vue2
    文章目录​​1.准备js​​​​1.1`dialog-drag.js`​​​​1.2`index.js`​​​​2.`main.js`引用自定义指令​​​​3.使用​​1.准备js1.1​​dialog-drag.js​​......
  • elememt ui 组件 dialog使用备忘
    文章目录​​1.多层嵌套dialog遮罩​​​​1.1描述​​​​1.2解决(子dialog中)​​​​2.鼠标移除dialog点击不关闭​​1.多层嵌套dialog遮罩1.1描述当有多层dialog嵌......
  • Java嵌套if else优化
    文章目录​​1.传统实现​​​​2.策略模式+工厂模式+单例模式优化​​​​2.1策略接口​​​​2.2不同策略实现类​​​​2.2.1处理策略一​​​​2.2.2处理策略二​......