当前位置:首页 > VUE

vue表格实现单行编辑

2026-02-22 05:35:48VUE

Vue 表格实现单行编辑的方法

使用 v-ifv-else 切换显示模式

在表格的每一行中,通过 v-ifv-else 控制编辑状态。默认显示文本内容,点击编辑按钮时切换为输入框。

<template>
  <table>
    <tr v-for="(item, index) in tableData" :key="index">
      <td>
        <span v-if="!item.isEditing">{{ item.name }}</span>
        <input v-else v-model="item.name" />
      </td>
      <td>
        <button @click="toggleEdit(item)">
          {{ item.isEditing ? '保存' : '编辑' }}
        </button>
      </td>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', isEditing: false },
        { name: '李四', isEditing: false },
      ],
    };
  },
  methods: {
    toggleEdit(item) {
      item.isEditing = !item.isEditing;
    },
  },
};
</script>

使用 v-show 控制编辑状态

v-if 类似,但 v-show 仅切换 CSS 的 display 属性,适合频繁切换的场景。

<template>
  <table>
    <tr v-for="(item, index) in tableData" :key="index">
      <td>
        <span v-show="!item.isEditing">{{ item.name }}</span>
        <input v-show="item.isEditing" v-model="item.name" />
      </td>
      <td>
        <button @click="toggleEdit(item)">
          {{ item.isEditing ? '保存' : '编辑' }}
        </button>
      </td>
    </tr>
  </table>
</template>

结合计算属性实现临时编辑

通过临时变量保存编辑前的数据,避免直接修改原始数据,适合需要取消编辑的场景。

<template>
  <table>
    <tr v-for="(item, index) in tableData" :key="index">
      <td>
        <span v-if="!item.isEditing">{{ item.name }}</span>
        <input v-else v-model="tempEditData.name" />
      </td>
      <td>
        <button @click="startEdit(item)" v-if="!item.isEditing">编辑</button>
        <button @click="saveEdit(item)" v-else>保存</button>
        <button @click="cancelEdit(item)" v-if="item.isEditing">取消</button>
      </td>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', isEditing: false },
        { name: '李四', isEditing: false },
      ],
      tempEditData: {},
    };
  },
  methods: {
    startEdit(item) {
      this.tempEditData = { ...item };
      item.isEditing = true;
    },
    saveEdit(item) {
      Object.assign(item, this.tempEditData);
      item.isEditing = false;
    },
    cancelEdit(item) {
      item.isEditing = false;
    },
  },
};
</script>

使用第三方表格组件(如 Element UI)

Element UI 的 el-table 组件内置了编辑功能,可以通过插槽自定义编辑逻辑。

vue表格实现单行编辑

<template>
  <el-table :data="tableData">
    <el-table-column prop="name" label="姓名">
      <template #default="{ row }">
        <span v-if="!row.isEditing">{{ row.name }}</span>
        <el-input v-else v-model="row.name" />
      </template>
    </el-table-column>
    <el-table-column label="操作">
      <template #default="{ row }">
        <el-button @click="toggleEdit(row)">
          {{ row.isEditing ? '保存' : '编辑' }}
        </el-button>
      </template>
    </el-table-column>
  </el-table>
</template>

注意事项

  • 编辑状态需要绑定到每一行的数据对象上,避免全局状态冲突。
  • 临时数据保存适合需要撤销操作的场景。
  • 第三方组件通常提供更完善的编辑功能,如校验、键盘事件等。

标签: 表格编辑
分享给朋友:

相关文章

vue表格实现复选框

vue表格实现复选框

Vue表格实现复选框的方法 基础实现(使用v-model绑定数组) 在Vue中可以通过v-model绑定数组来实现复选框功能。以下是一个基础示例: <template> <ta…

vue实现表格树

vue实现表格树

Vue 实现表格树的方法 使用递归组件实现树形表格 在 Vue 中可以通过递归组件实现树形表格结构。定义一个组件,该组件可以调用自身来渲染子节点。 <template> <ta…

vue实现表格报表

vue实现表格报表

Vue 实现表格报表的方法 使用 Element UI 的表格组件 Element UI 提供了功能丰富的表格组件,适合快速实现报表功能。安装 Element UI 后,可以直接使用 el-table…

vue实现拖拽表格

vue实现拖拽表格

Vue 实现拖拽表格的方法 使用第三方库(推荐) 推荐使用 vuedraggable 或 sortablejs 这类成熟的拖拽库,它们对 Vue 有良好支持且功能丰富。 安装 vuedraggabl…

Vue在线表格实现

Vue在线表格实现

Vue在线表格实现方案 使用Element UI的el-table组件 Element UI提供了功能强大的表格组件el-table,支持排序、筛选、分页等常见功能。安装Element UI后可直接使…

vue 实现树形表格

vue 实现树形表格

实现树形表格的基本思路 在Vue中实现树形表格通常需要结合递归组件或第三方库。核心逻辑是将嵌套的树形数据通过递归渲染,并支持展开/折叠操作。 使用递归组件实现 定义一个递归组件,通过v-for循环渲…