当前位置:首页 > VUE

vue表格实现单行编辑

2026-02-22 05:35:48VUE

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

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

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

vue表格实现单行编辑

<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 属性,适合频繁切换的场景。

vue表格实现单行编辑

<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 组件内置了编辑功能,可以通过插槽自定义编辑逻辑。

<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 实现表格 在 Vue 中实现表格可以通过多种方式完成,以下是一个基于 Vue 3 的示例,展示如何动态渲染表格数据并支持基础功能(如排序、筛选)。 基础表格实现 通过 v-for 循环…

制作css表格

制作css表格

基础CSS表格结构 使用HTML的<table>标签创建表格骨架,搭配CSS控制样式。以下是一个基础示例: <table class="styled-table"> &l…

vue实现表格拖动列宽

vue实现表格拖动列宽

实现表格列宽拖动的核心思路 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽逻辑,动态修改列宽。需要处理表头与表体的联动,确保拖动时视觉一致。 基础HTML结构 &…

vue element实现表格

vue element实现表格

Vue + Element UI 实现表格 Element UI 提供了强大的表格组件 el-table,结合 Vue 可以快速实现数据展示、排序、筛选等功能。 基础表格实现 安装 Element…

css制作表格

css制作表格

CSS 制作表格的方法 使用 CSS 可以灵活地创建和样式化表格,以下是几种常见的方法: 使用 HTML 表格标签结合 CSS 样式 通过 HTML 的 <table>、<tr&g…

表格制作css

表格制作css

CSS表格样式设计 基础表格样式 通过border-collapse合并边框,使表格更整洁。width控制整体宽度,text-align设置文字对齐方式。 table { border-coll…