vue el-table 实现行内编辑

本文介绍了在Vue项目中使用Element UI的el-table组件实现行内编辑的详细步骤。包括自定义表头添加“新增”按钮,动态添加和删除行,以及根据当前行状态判断显示不同操作按钮(编辑/删除 vs. 保存/取消)。
摘要由CSDN通过智能技术生成

最近做一个vue前后端分离的项目,前端框架用element ui,在 使用 el-table 的过程中,需要实现行内编辑,效果大概是这样:在这里插入图片描述
分为下面几个步骤:

(1) 自定义 el-table 的表头(即添加 “新增” 按钮):

<el-table :data="propTableData.col.filter(data => handleAdd || data.name.toLowerCase().includes(handleAdd.toLowerCase()))"
          highlight-current-row
          border>
</el-table>
<template slot="header"
       slot-scope="scope">
      <el-button v-model="handleAdd"
             size="mini"
             type="success"
             round
             plain
             @click="handleAdd(scope.$index, scope.row)">{
   {
    $t('common.add') }}</el-button>
</template>

表头自定义了一个“添加”按钮,点击 el-table 动态添加一行。

(2) el-table 动态添加一行:

let row = {
   
        code: '',
        maxValue: '',
        minValue: '',
        name: '',
        valueType: 'String',
        id: '',
        typeId: '',
        warning: false,
        isSet: true
}
this.propTableData.col.push(row)

vue 数据变化驱动 dom 进行更新,给 table 绑定的数据 propTableData.col 添加一个元素,则表格会添加一行。

propTableData.sel 保存当前行数据:

this.propTableData.sel = row

(3) el-table 动态删除一行:

子组件中触发父组件的 delete 事件:

this.$emit('delete', row.id)

(4)当前行状态判断,即是否处于编辑状态,控制表格每一行的按钮元素的移除与插入:

<template slot-scope="scope">
          <el-button size="mini"
                     type="primary"
                     round
                     plain
                     v-if="!scope.row.isSet"
                     @click="valChange(scope.row,scope.$index,true)">{
   {
    $t('common.edit') }}</el-button>
          <el-button size="mini"
                     type="primary"
                     round
                     plain
                     v-else
                     @click="valChange(scope.row,scope.$index,true)">{
   {
    $t('common.save') }}</el-button>
          <el-button size="mini"
                     type="danger"
                     round
                     plain
                     v-if="!scope.row.isSet"
                     @click="handleDelete(scope.$index, scope.row)">{
   {
    $t('common.delete') }}</el-button>
          <el-button size="mini"
                     type="danger"
                     round
                     plain
                     v-else
                     @click="valChange(scope.row,scope.$index,false)">{
   {
    $t('common.cancel') }}</el-button>
</template>

上面代码中,通过 v-if=“scope.row.isSet” 来判断当前行是否处于编辑状态。

如果当前行处于编辑状态,则按钮为“保存”和“取消”,此时可对当前行进行保存和取消操作,且不能新增,除非先保存当前行;

如果当前行处于非编辑状态,则按钮为“编辑”和“删除”状态,此时可对当前行进行编辑和删除操作。

这样,就可以实现 el-table 行内编辑的需求。
在这里插入图片描述
完整版代码如下:

<template>
  <el-dialog class="uiot-dialog"
             width="900px"
             :visible.sync="isShow"
             :before-close="beforeClose"
             :close-on-click-modal="false"
             
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值