element-ui table 表格组件实现可拖拽效果(行列)

Posted BBinChina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了element-ui table 表格组件实现可拖拽效果(行列)相关的知识,希望对你有一定的参考价值。

首先,需要用到第三方库,sortable.js,因为我的项目是vue,所以在package引用的是vuedraggable,而vuedraggable是包含sortable的。

npm install sortable.js --save
// 或者
npm i -S vuedraggable
// vuedraggable依赖 Sortable.js,所以下载了vuedraggable,我们便可以直接引入Sortable使用Sortable的特性。
// vuedraggable是Sortable一种加强,实现组件化的思想,可以结合Vue,使用起来更方便

Demo

<template>
	<div>
		<el-table id="tableId"
          :data="tableData"
          style="width: 100%"
          header-row-class-name="table-header"
          row-key="id">
			<el-table-column
            label="demoColumn"
            header-align="center"
            align="center"
            prop="demoColumn"
          ></el-table-column>
		</el-table>
	</div>
</template>
<script>
export default {
  data() {
  	return {
  		tableData;
  	}
  }
  methods: {
  	//表格拖拽
    rowDrop() {
      const tbody = document.querySelector(
        "#tableId.el-table__body-wrapper tbody"
      );
      const _this = this;
      Sortable.create(tbody, {
        onEnd({ newIndex, oldIndex }) {
          const currRow = _this.tableData.splice(oldIndex, 1)[0];
          _this.tableData.splice(newIndex, 0, currRow);
        },
      });
    },
    //列拖拽
    columnDrop() {
      const wrapperTr = document.querySelector('#tableId.el-table__header-wrapper tr')
      this.sortable = Sortable.create(wrapperTr, {
        animation: 180,
        delay: 0,
        onEnd: evt => {
          const oldItem = this.dropCol[evt.oldIndex]
          this.dropCol.splice(evt.oldIndex, 1)
          this.dropCol.splice(evt.newIndex, 0, oldItem)
        }
      })
    }
  },
  mounted() {
    // 阻止表格默认行为,用于实现拖拽
    document.body.ondrop = function (event) {
      event.preventDefault();
      event.stopPropagation();
    };
    this.rowDrop();
    this.columnDrop();
  },
}
</script>

<style lang="less" scoped>

</style>

总结

1、在mounted的时候更改表格的默认行为。
2、更改表格默认行为时,更改了element的标签事件

以上是关于element-ui table 表格组件实现可拖拽效果(行列)的主要内容,如果未能解决你的问题,请参考以下文章

Vue + Element-ui实现后台管理系统---封装一个Form表单组件和Table表格组件

element-ui表格组件table实现列的动态显示与隐藏

Element-ui 表格 (Table) 组件中动态合并单元格

Vue + element-ui 前端项目一Table 表格并实现分页 2

Element-UI实现复杂table表格结构

使用element-ui 的table 组件 表格线条不对齐