Vue Element Sortablejs实现表格列的拖拽案例详解

yizhihongxing

题目要求我详细讲解“Vue Element Sortablejs实现表格列的拖拽案例详解”。那么,我会给出完整的攻略以及两个示例,以下是具体步骤,建议您可以配合阅读文章中的代码来更好的理解。

一、前置知识

在正式开始之前,需要基本了解以下几个知识点:

  1. Vue框架基础;
  2. Vue组件的使用;
  3. Element UI库的使用;
  4. Sortable.js插件介绍与使用。

二、实现表格列的拖拽

  1. 创建Vue组件

首先,在Vue项目中创建一个组件,命名为“TableDrag”,代码如下:

<template>
  <div>
    <el-table :data="tableData" ref="dragTable" v-sortable>
      <el-table-column v-for="item in columns" :key="item.prop" :prop="item.prop" :label="item.label">
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
import Sortable from 'sortablejs';
export default {
  name: 'TableDrag',
  props: {
    columns: {
      type: Array,
      default() {
        return [];
      }
    },
    data: {
      type: Array,
      default() {
        return [];
      }
    }
  },
  data() {
    return {
      tableData: []
    };
  },
  mounted() {
    this.tableData = this.data;
    this.initSortable();
  },
  methods: {
    initSortable() {
      const that=this
      this.sortable = Sortable.create(this.$refs.dragTable.$el.querySelector('tbody'), {
        animation: 150,
        filter: '.noclick',
        dataIdAttr: 'order',
        handle: '.drag',
        onUpdate(evt) {
          const {oldIndex, newIndex} = evt;
          that.tableData.splice(newIndex, 0, that.tableData.splice(oldIndex, 1)[0])
          that.$emit('drag-end', that.tableData);
        }
      });
    }
  }
};
</script>

这个组件包含了一个表格,它使用了Element UI的el-table组件渲染数据。同时,我们使用v-sortable指令将表格转化为可拖拽的组件。

2.使用组件

在Vue项目中使用刚才创建的组件,示例代码如下:

<template>
  <div>
    <table-drag :data="tableData" :columns="tableColumns" @drag-end="dragEnd"></table-drag>
  </div>
</template>

<script>
import TableDrag from './TableDrag.vue'
export default {
  name: 'App',
  data() {
    return {
      tableData: [],
      tableColumns: [
        { label: '姓名', prop: 'name'},
        { label: '年龄', prop: 'age'},
        { label: '性别', prop: 'gender'},
        { label: '家庭地址', prop: 'address'},
        { label: '联系电话', prop: 'phone'},
      ]
    }
  },
  mounted() {
    this.mockData();
  },
  methods: {
    mockData() {
      const data = [];
      for (let i = 0; i < 10; i++) {
        data.push({
          name: '张三' + i,
          age: Math.floor(Math.random() * 20 + 20),
          gender: i % 2 === 0 ? '男' : '女',
          address: '湖南省长沙市长沙县XXX大道',
          phone: '182' + Math.floor(Math.random() * 100000000).toString()
        })
      }
      this.tableData = data;
    },
    dragEnd(data) {
      this.tableData = data;
    }
  },
  components: {
    TableDrag
  }
};
</script>

这个示例里,我们创建了一个表格,表格数据由mockData方法获取,然后将数据和列配置传递给TableDrag组件。同时,@drag-end事件处理方法dragEnd用于更新表格数据。

三、上述代码的解释

代码中最重要的部分是Sortable.create方法,它是Sortable.js插件的核心代码,以下是一些参数的详细解释:

1.animation 动画时长,单位毫秒。

2.filter 拖拽过程中要过滤掉某些元素。

3.dataIdAttr 是该元素要保存的数据,相当于data属性,一般是自定义属性,默认为'Data-id'。

4.handle 只有拖拽到指定区域才能拖拽,并且只能拖拽指定的元素。

5.onUpdate 在拖拽完成后触发,用于更新数据或提交数据。

四、下面是两个示例的详细说明,它们分别是:

1.禁止某些列拖拽

在一张表格中,有时候我们不希望某些列进行拖拽,比如表格的首列是固定不动的某个标识,不需要移动它,此时我们可以通过Sortable.js提供的filter参数来实现。

示例代码:

 initSortable() {
      const that=this
      this.sortable = Sortable.create(this.$refs.dragTable.$el.querySelector('tbody'), {
        animation: 150,
        filter: '.noclick',
        dataIdAttr: 'order',
        handle: '.drag',
        onUpdate(evt) {
          const {oldIndex, newIndex} = evt;
          that.tableData.splice(newIndex, 0, that.tableData.splice(oldIndex, 1)[0])
          that.$emit('drag-end', that.tableData);
        }
      });
    }

可以看到,这里给Sortable.create方法传递了一个filter参数,这个参数的值为.noclick,表示在拖拽过程中,所有带有noclick类名的元素都不会被拖拽。

2.支持列宽度拖拽

在表格中,除了支持表头列的拖拽,也应该支持表头的列宽度拖拽,而实现列宽度拖拽可以使用Element UI库提供的resizable属性。

示例代码:

<el-table-column resizable ...></el-table-column>

在这段代码中,只需要给el-table-column添加一个resizable属性即可支持列宽度拖拽。同时,你还可以设置el-table-column的min-width与max-width属性来限制可拖拽的宽度范围。

这就是关于“Vue Element Sortablejs实现表格列的拖拽案例详解”的攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue Element Sortablejs实现表格列的拖拽案例详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 使用CSS3创建动态菜单效果

    下面是使用CSS3创建动态菜单效果的完整攻略。 1. 准备工作 在开始创建动态菜单效果之前,我们需要先准备好以下材料: HTML结构 菜单的基本结构需要先写好,例如使用无序列表 <ul> 和列表项 <li> 创建一个简单的菜单。 <ul class="menu"> <li><a hre…

    css 2023年6月10日
    00
  • javascript 动态改变层的Z-INDEX的代码style.zIndex

    下面是讲解“JavaScript 动态改变层的 Z-INDEX 的代码 style.zIndex”的完整攻略。 1. 什么是 zIndex 首先要了解的是,zIndex 是 CSS 中的一个属性,控制层的堆叠顺序。值越大的元素会被放在更靠上的位置,覆盖值较小的元素。而 style.zIndex 是一个 JavaScript 属性,可以用来动态修改元素的 zI…

    css 2023年6月10日
    00
  • IE下使用form时所在行被撑高的解决方法

    IE浏览器在渲染form表单元素时,可能会出现表单所在行被撑高的现象,这主要是由于IE会为表单自动添加display: inline-block;的样式导致的。下面提供两种解决方式,以便在IE中使用form表单元素不会影响页面布局。 方式一:使用vertical-align 将form表单元素和其所在的元素都设置为vertical-align: top;的样…

    css 2023年6月9日
    00
  • CSS毛玻璃效果如何实现

    CSS毛玻璃效果如何实现 CSS毛玻璃效果是一种模糊的视觉效果,可以使图像或背景看起来更加柔和和模糊。本攻略将介绍两种实现CSS毛玻璃效果的方法,包括使用CSS滤镜和使用背景图像。 使用CSS滤镜 CSS滤镜是一种CSS属性,可以对元素应用各种视觉效果,包括模糊、颜色调整、亮度调整等。使用CSS滤镜可以轻松实现CSS毛玻璃效果。例如: .blur { bac…

    css 2023年5月18日
    00
  • JQuery 实现的页面滚动时浮动窗口控件

    题目:详细讲解“JQuery 实现的页面滚动时浮动窗口控件”的完整攻略 介绍 JQuery是一种流行的JavaScript库,它使用极简的风格使DOM操作变得容易。JQuery还提供了许多插件,可以帮助我们轻松地实现一些常见的 Web 功能。其中就包括页面滚动时浮动窗口控件。 准备工作 在实现这个控件之前,我们需要准备一些前置工作。首先,需要引入JQuery…

    css 2023年6月10日
    00
  • 浅谈CSS中的OOCSS编程方式

    浅谈CSS中的OOCSS编程方式 什么是OOCSS? OOCSS是指基于面向对象设计的CSS编程方式,其主要思想是将CSS样式分离为可重复利用的模块(组件)。OOCSS的编程方法使用较少的CSS选择器和更多的类名,以增加代码的可重用性和可扩展性。 怎么使用OOCSS? 以下是一些使用OOCSS编程方式的建议: 1.分类样式 将CSS样式按照功能分类,这可以使…

    css 2023年6月9日
    00
  • SpringBoot+Vue开发之Login校验规则、实现登录和重置事件

    我来简单地讲解一下”SpringBoot+Vue开发之Login校验规则、实现登录和重置事件”的攻略。 1. Login校验规则 在前端表单中实现登录功能时,需要考虑以下几个方面的校验规则: 账号不能为空,且长度不应该超过某个特定值 密码不能为空,且长度不应该超过某个特定值 根据用户输入的账号和密码向后端发送请求,验证其是否正确 在具体实现当中,可以使用Vu…

    css 2023年6月10日
    00
  • 微信小程序 滚动选择器(时间日期)详解及实例代码

    下面就为大家详细讲解微信小程序中的滚动选择器(时间日期)的相关知识及实例代码,包括使用步骤、代码实现以及注意事项等内容。 一、滚动选择器介绍 滚动选择器在小程序中可以用来让用户从一组可选项中进行选择。它提供了一种非常方便的选择方式,不仅适用于时间日期的选择,而且也适用于其他类型的选择。 在小程序中,时间日期选择器是通过 picker 组件实现的。picker…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部