当前位置:首页 > VUE

vue实现拖拽表格

2026-03-29 18:02:09VUE

Vue 实现拖拽表格的方法

使用 vuedraggable

安装 vuedraggable 库:

npm install vuedraggable

在 Vue 组件中引入并使用:

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 的事件监听实现拖拽:

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>

拖拽表格行并保存顺序

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

<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)增强用户体验。

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

相关文章

网页表格制作css代码

网页表格制作css代码

基础表格样式 使用CSS为HTML表格添加基础样式,如边框、间距和背景色: table { width: 100%; border-collapse: collapse; margin:…

vue实现拖拽

vue实现拖拽

Vue 实现拖拽功能的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。在 Vue 中可以通过绑定这些事件来实现…

vue element实现表格

vue element实现表格

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

vue拖拽实现方式

vue拖拽实现方式

Vue 拖拽实现方式 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件(如 dragstart、dragend、dragover、…

css怎么制作表格

css怎么制作表格

使用HTML和CSS制作表格 在HTML中,表格由<table>标签定义,结合CSS可以灵活控制样式。 基本HTML结构: <table> <tr>…

网页表格制作css代码

网页表格制作css代码

基础表格样式 使用CSS为HTML表格添加基础样式,包括边框、间距和背景色: table { width: 100%; border-collapse: collapse; margin…