当前位置:首页 > VUE

vue实现拖拽表格

2026-03-29 18:02:09VUE

Vue 实现拖拽表格的方法

使用 vuedraggable

安装 vuedraggable 库:

npm install vuedraggable

在 Vue 组件中引入并使用:

<template>
  <draggable v-model="list" tag="table" class="table">
    <tr v-for="(item, index) in list" :key="item.id">
      <td>{{ item.name }}</td>
      <td>{{ item.age }}</td>
    </tr>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      list: [
        { id: 1, name: 'Alice', age: 25 },
        { id: 2, name: 'Bob', age: 30 },
      ],
    };
  },
};
</script>

使用 HTML5 原生拖拽 API

通过 HTML5 的 draggable 属性和 Vue 的事件监听实现拖拽:

<template>
  <table>
    <tr
      v-for="(item, index) in list"
      :key="item.id"
      draggable="true"
      @dragstart="handleDragStart($event, index)"
      @dragover.prevent
      @drop="handleDrop($event, index)"
    >
      <td>{{ item.name }}</td>
      <td>{{ item.age }}</td>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: 'Alice', age: 25 },
        { id: 2, name: 'Bob', age: 30 },
      ],
      draggedIndex: null,
    };
  },
  methods: {
    handleDragStart(event, index) {
      this.draggedIndex = index;
    },
    handleDrop(event, targetIndex) {
      const movedItem = this.list.splice(this.draggedIndex, 1)[0];
      this.list.splice(targetIndex, 0, movedItem);
    },
  },
};
</script>

拖拽表格列的排序

如果需要拖拽表格列(调整列顺序),可以使用 vuedraggable 结合 theadtbody

<template>
  <table>
    <draggable v-model="headers" tag="thead" item-key="key">
      <tr>
        <th v-for="header in headers" :key="header.key">{{ header.text }}</th>
      </tr>
    </draggable>
    <tbody>
      <tr v-for="item in list" :key="item.id">
        <td v-for="header in headers" :key="header.key">{{ item[header.key] }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      headers: [
        { key: 'name', text: 'Name' },
        { key: 'age', text: 'Age' },
      ],
      list: [
        { id: 1, name: 'Alice', age: 25 },
        { id: 2, name: 'Bob', age: 30 },
      ],
    };
  },
};
</script>

拖拽表格行并保存顺序

如果需要保存拖拽后的顺序到后端,可以在拖拽结束时触发保存操作:

vue实现拖拽表格

<template>
  <draggable v-model="list" tag="table" @end="saveOrder">
    <tr v-for="(item, index) in list" :key="item.id">
      <td>{{ item.name }}</td>
      <td>{{ item.age }}</td>
    </tr>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      list: [
        { id: 1, name: 'Alice', age: 25 },
        { id: 2, name: 'Bob', age: 30 },
      ],
    };
  },
  methods: {
    saveOrder() {
      const newOrder = this.list.map((item, index) => ({
        id: item.id,
        order: index + 1,
      }));
      // 调用 API 保存顺序
      console.log('New order:', newOrder);
    },
  },
};
</script>

注意事项

  • 使用 vuedraggable 时,确保 v-model 绑定的是数组类型数据。
  • 如果需要拖拽表格列,注意区分 theadtbody 的拖拽逻辑。
  • 拖拽过程中可以通过 CSS 样式(如 drag-class)增强用户体验。

标签: 表格拖拽
分享给朋友:

相关文章

如何实现vue表格联动

如何实现vue表格联动

实现 Vue 表格联动的方法 数据绑定与响应式更新 通过 Vue 的响应式特性,将多个表格的数据绑定到同一个数据源或计算属性。当一个表格的数据发生变化时,另一个表格会自动更新。例如: data()…

vue实现拖拽div

vue实现拖拽div

实现拖拽功能的基本思路 在Vue中实现拖拽功能可以通过HTML5的拖拽API或第三方库如vuedraggable来完成。以下是两种常见方法的详细说明: 使用HTML5拖拽API HTML5提供了原生…

vue动态表格实现

vue动态表格实现

Vue动态表格实现方法 使用v-for指令渲染动态数据 通过v-for指令可以循环遍历数组数据生成表格行,数据变化时表格自动更新。示例代码: <template> <table…

vue 拖拽排序 实现

vue 拖拽排序 实现

实现拖拽排序的基本思路 在Vue中实现拖拽排序通常需要借助HTML5的拖放API或第三方库如sortablejs、vuedraggable等。以下是两种常见实现方式: 使用HTML5原生拖放API…

vue表格动态实现

vue表格动态实现

Vue 表格动态实现方法 动态表格的实现通常涉及数据绑定、列配置动态化以及交互功能的灵活处理。以下是几种常见场景的具体实现方式: 动态数据绑定 通过v-for指令循环渲染表格行数据,数据变化时表格自…

vue实现表格报表

vue实现表格报表

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