element-ui表格组件el-table实现行编辑与新增功能

2023-11-09

       element前端ui组件挺美观的,我们也使用了他们的table组件,但是默认没有提供行编辑功能,我们可以通过将table的每个单元格换成input框来巧妙实现。默认每个单元格就是一个template数据填充,不可编辑;我们可以在template里面包裹一个input框来实现单元格可编辑;等每一个单元格都可编辑的时候,我们可以在每一行后面加一个按钮来控制只可编辑当前行。

      先来看一下原始不可编辑的写法:

<el-table width  :data="list"  element-loading-text="Loading"  border fit highlight-current-row>
      <el-table-column label="电话" width="260px" align="center">
        <template slot-scope="scope">
          {{ scope.row.tel }}
        </template>
      </el-table-column>
</el-table>

     再来看一下可编辑的写法:

<el-table width  :data="list"  element-loading-text="Loading"  border fit highlight-current-row>

      <el-table-column label="序号"  type="index" width="50"></el-table-column>
      <el-table-column label="电话" width="350%" align="center">
        <template slot-scope="scope">
          <el-input v-model="scope.row.tel" :disabled="!scope.row.disabled"></el-input>
        </template>
      </el-table-column>
      <el-table-column label="地址" width="350%" align="center">
        <template slot-scope="scope">
          <el-input v-model="scope.row.address" :disabled="!scope.row.disabled"></el-input>
        </template>
      </el-table-column>

<!-- 此处省略了一些按钮代码,后面会讲到-->

.................
  </el-table> 

      注意在每一个template元素里面我都放了一个input元素,依然使用v-model绑定值,只不过加了一个disable属性来控制是否可编辑;页面初始化的时候,默认整个表格不可编辑,只有点击了某一行后面的编辑按钮以后,这一行才可以编辑。

      由于在vue的精华与核心就是“数据绑定”,页面上的几乎所有属性都可以通过数据来定义,所以我这里采用将disable属性定义在每一行的disable变量里面,这样点击当前行的编辑按钮时,只会改变当前行的编辑状态。我们先来看一下上面改进后遗留的按钮代码:

<el-table-column align="center" label="操作" width="200%">
        <template slot-scope="scope">
          <el-button v-if="scope.row.edit" type="success" size="mini"
                     icon="el-icon-circle-check-outline" @click="confirmEdit(scope.row)">保存
          </el-button>
          <el-button v-else type="primary" size="mini"
                     @click="startEdit(scope.row)">编辑
          </el-button>
          <el-button v-if="scope.row.edit" class="cancel-btn" size="mini" icon="el-icon-refresh"
                     type="warning" @click="cancelEdit(scope.row)">取消
          </el-button>
          <!--<el-button type="danger" size="mini" @click="handleConfig(scope.row)">删除</el-button>-->
        </template>
</el-table-column>

     我在每一行后面添加了一个“编辑”按钮,当点击编辑按钮时,按钮栏变为保存和取消两个按钮;他们的状态更换变量通过edit来定义实现

// 编辑

startEdit(row) {
      row.edit = !row.edit;
      row.disabled = true;
    },

// 保存
confirmEdit(row) {
      row.edit = false;
      row.originalValue = row.address;
      if (row.tel == null || row.address == null) {
        this.loadAppConfigs();
        return;
      }
      let name= this.params.name;
      const p = {...row, name};

      // 调用更新方法
      updateXXXXx(p);
      this.$message({
        message: '已修改!',
        type: 'success'
      });
      row.disabled = false;
      if (row.id === undefined) {
        // 重新加载该页面
      }
},

    // 取消
cancelEdit(row) {
      row.address = row.originalValue;
      row.edit = false;
      row.disabled = false;
      this.$message({
        message: '已取消修改!',
        type: 'warning'
      });
      if (row.id === undefined) {

        // 重新加载该页面
      }
    }

}

      表格绑定数据源data本身是一个数组,新增一行即是往数组中再添加一个元素,不过如果我们想新增一行时显示在表格的第一行,那么就要用到unshift方法,另外需要在新增一行时处于可编辑状态,还要注意定义一个新行时的状态变量值,因为新增的是一个空输入框,需要我们来输入值,而不是一个默认值帮我们自动生成:

// 增加行
    addRow () {
      let newLine = {
        tel: this.tel,
        address: this.address,
        edit: true, // 新增时处于可编辑状态,所以按钮是保存和取消
        disabled: true // 打开编辑状态
      };
      this.list.unshift(newLine); // 移到第一行
    },

     另外为input框设置了disable属性以后,当不可编辑时处于禁用状态,此时文本字体颜色比较暗淡不清晰,看上去不美观,我们的目的是不让他编辑,但是依然需要正常显示颜色,这种情况只能通过重新定义input的样式来实现:

<style>
  input[disabled], input:disabled, input.disabled {
    color: #000000;
    -webkit-text-fill-color: #000000;
    -webkit-opacity: 1;
    opacity: 1;
    font-weight: 900;
  }
</style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

element-ui表格组件el-table实现行编辑与新增功能 的相关文章

  • java基础篇(一) 标识符、常量、变量、运算符

    一 标识符的学习和规则 1 定义 在程序中我们自定义的一些名称 在编程的过程中 经常需要在程序中定义一些符号来标记一些名称 如包名 类名 方法名 参数名 变量名 这些符号被称为标识符 2 组成元素 52个大小写英文字母a z 26 2 52
  • Moonbeam路由流动性

    Moonbeam路由流动性 Moonbeam Routed Liquidity MRL 使加密资产流动性能够从其他生态系统 如以太坊 Solana Polygon或Avalanche 进入波卡生态系统 借助MRL 用户可以通过简洁的用户体验

随机推荐

  • 大数据处理框架-Spark DataFrame构造、join和null空值填充

    1 Spark DataFrame介绍 DataFrame是Spark SQL中的一个概念 它是一个分布式的数据集合 可以看作是一张表 DataFrame与RDD的主要区别在于 前者带有schema元信息 即DataFrame所表示的二维表
  • Mysql多表连接

    表连接 前提 有时候我们需要的数据不止在一张表中 需要多个表结合查询时 就可以使用表连接 分类 1 1 内部连接 提供了两种表与表之间的连接方式 表与表之间建立起关联的列 要求列名可以不一样 但是这两个列的数据类型和内容得保持一致 1 2
  • Task01:概览西瓜书+南瓜书第1、2章(2天)

    第一章 绪论 1 1引入机器学习 引用周老师西瓜书对机器学习的解释 若计算机科学是研究关于算法的学问 则机器学习可以说是关于学习算法的学问 1 2 基本术语 机器学习是一门专业性很强的技术 它大量地应用了数学 统计学上的知识 周老师用挑选西
  • 【深度学习】CV_基于CNN的图像分类模型_代码逐行注释解析

    目录 前言 一 任务描述和关键环节 一 数据预处理 二 网络模块设置 三 网络模型保存与测试 二 具体步骤 一 任务分析与图像数据处理 1 导包 2 数据读取与预处理 2 1 数据读取 2 2 数据预处理 1 制作数据源 2 将预处理的数据
  • Nuxt3请求封装数据封装

    新建utils http ts import hash from ohash 后端返回的数据类型 export interface ResOptions
  • 重磅!Cloud Ace 在巴西圣保罗建立第一家南美子公司

    Cloud Ace Inc 总部 东京都千代田区 代表 青木诚 以下简称 Cloud Ace 于2023年3月10日宣布在巴西成立新子公司 Cloud Ace 一直在全球扩展其业务 从亚洲开始 目标是在世界各地设有办事处 我们最近加入的是在
  • Web菜鸟入门教程 - MyBatis通过数据库生成java代码

    SpringBoot大大简化了Web开发流程 可以这么说 做Web后来开发大部分时间就是在做配置文件修改 Web开发中 终端的运算能力越来越强 大部分场景就是数据库的操作 只有少部分逻辑会放在Web端处理 而这些增删查改基本属于标准的格式
  • 实现一个顺序存储的线性表(数据结构与算法 - 线性表)

    任务描述 本关任务 实现 step1 Seqlist cpp 中的SL InsAt SL DelAt和SL DelValue三个操作函数 以实现线性表中数据的插入 删除与查找等功能 相关知识 线性表是最基本 最简单 也是最常用的一种数据结构
  • Python list函数

    目录 描述 语法 使用示例 1 创建一个空列表 无参调用list函数 2 将字符串转换为列表 3 将元组转换为列表 4 将字典转换为列表 5 将集合转换为列表 6 将其他可迭代序列转化为列表 注意事项 1 参数必须是可迭代序列对象 将列表转
  • chrome中直接使用import

    现在我们在开发项目时都是基于构建工具 像webpack 上进行开发 所以在使用import时得心应手 但今天在chrome中直接使用import时 发现不知道如何使用 chrome中直接使用import 三个条件 浏览器版本需要支持 浏览器
  • c++常用输出函数详解

    1 printf printf的基本运用 printf是c 标准输出函数 目的是向标准输出设备按规定格式输出信息 格式如下 printf d a 上面的a是一个int形变量 但如果想输出一个字符型的变量 字符串等该怎么办呢 那我们就要把 后
  • 【mmdetection】小trick试验结果

    基准 faster rcnn r50 fpn 1x coco简称frrf config mAP 最好 模型大小 publish model cal train time s iter 1 frrf 0 9346 315 32MB
  • axios实现同步请求

    如何实现ajax请求的同步 通过jquery发送 将async属性设置为false 这样就会发送同步请求 在axios中 所有的请求都是异步发送的 所以单独用axios是实现不了同步的 需要结合async与await关键字使用 var da
  • ab压力测试 和 nginx 配置优化 及 用户打开的最大进程数

    原文 https blog csdn net wudinaniya article details 86064797 一 ab压力测试 和 nginx 配置优化 压力测试工具 ApacheBench 简称ab 是Apache 中自带的基准性
  • 毕业设计-基于 Python 的天气预测系统

    目录 前言 课题背景和意义 实现技术思路 一 Python 二 网络爬虫 三 基于 Python 的天气预测系统 四 系统测试 五 总结 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学
  • MATLAB 创建矩阵

    创建简单数值矩阵 输入矩阵是要以 为标识 矩阵的元素应在 内部 此时MATLAB才识别为矩阵 矩阵的同行元素之间可由空格或 分隔 行与行之间要用 或回车符分隔 A 1 2 3 4 5 6 7 8 9 运算结果 使用 zeros 函数和 on
  • luci流程简介

    LuCI作为 FFLuCI 诞生于2008年3月份 目的是为OpenWrt固件从Whiterussian 到 Kamikaze实现快速配置接口 LuCI是OpenWrt上的Web管理界面 LuCI采用了MVC三层架构 使用lua脚本开发 所
  • mysql不能使用别名做判断条件的解决方案

    错误例子 select name as n from user where n 张三 报错 n 字段在表user中不存在 解决办法 select name as n from user where name 张三 具体原因 请自行百度
  • SpringMVC框架从入门到精通

    文章目录 SpringMVC 框架介绍 概述 MVC模型 性能超群 工作原理 案例 展示汽车数据 需求 创建Maven module 创建RunApp java Car java CarController java 测试 处理请求参数 概
  • element-ui表格组件el-table实现行编辑与新增功能

    element前端ui组件挺美观的 我们也使用了他们的table组件 但是默认没有提供行编辑功能 我们可以通过将table的每个单元格换成input框来巧妙实现 默认每个单元格就是一个template数据填充 不可编辑 我们可以在templ