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

题目要求我详细讲解“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日

相关文章

  • asp.net后台动态添加JS文件和css文件的引用实现方法

    下面我将详细讲解一下ASP.NET后台动态添加JS文件和CSS文件的引用实现方法的完整攻略。 1. 简介 ASP.NET中动态添加JS文件和CSS文件的引用实现方法,在某些情况下非常有用。例如,如果您需要根据用户输入的内容动态调整网页的样式或行为的时候,动态添加JS文件和CSS文件可能是一个很好的选择。 2. 实现方法 在ASP.NET中,动态添加JS文件和…

    css 2023年6月9日
    00
  • 怎样在html文档里做隔行换色的多行方法

    要在HTML文档中做隔行换色,我们可以使用CSS中的伪类选择器nth-child()来实现。以下是详细的攻略: 步骤一:在HTML中为需要隔行换色的元素添加class或id属性 在HTML中找到需要隔行换色的元素,可以是table中的tr元素或是ul/li列表中的li元素,为其添加class或id属性。例如: <table> <tr cla…

    css 2023年6月10日
    00
  • Bootstrap一款超好用的前端框架

    Bootstrap一款超好用的前端框架 什么是Bootstrap? Bootstrap是Twitter开源的一款前端框架,它能够让开发者快速、简洁的构建响应式的Web页面,具有例如网格系统、基础样式、JavaScript插件等特性。可以让开发者更专注于网站的功能和美感,而不必乱花精力去设计一些琐碎的东西。 为什么要使用Bootstrap? 快速构建响应式网页…

    css 2023年6月9日
    00
  • 优化浏览器渲染 指定图片尺寸

    优化浏览器渲染,指定图片尺寸是一种优化网页性能的关键方法。通过指定图片尺寸,可以让浏览器在下载图片之前就已经知道它应该被如何呈现,从而可以更快地进行页面加载和渲染。下面是指定图片尺寸的完整攻略: 1. 为什么需要指定图片尺寸 在网站中,图片通常是占用大量带宽和加载时间的元素之一。如果没有指定图片的尺寸,那么浏览器在进行页面渲染时需要请求整张图片,然后才能确定…

    css 2023年6月10日
    00
  • 详解CSS nth-child与nth-of-type的元素查找方式

    详解CSS nth-child与nth-of-type的元素查找方式 在CSS中,nth-child和nth-of-type都是常见的选择器。它们的作用是用于选择具有特定顺序的元素,但它们的使用方式略有不同。本文将详细讲解这两种选择器的使用方法,并通过示例进行说明。 基本用法 nth-child nth-child用于选择某个元素在其父元素的全部子元素中的顺…

    css 2023年6月10日
    00
  • 10个实用的CSS属性小结

    下面是详细的讲解“10个实用的CSS属性小结”的完整攻略: 10个实用的CSS属性小结 1. box-sizing box-sizing属性用于设置元素的盒子模型,决定元素的内、外边距是否包含在元素的宽度和高度之内,默认值为content-box。合理使用box-sizing属性不仅能简化元素的排版,还能够提高页面的性能。 .example { box-si…

    css 2023年6月9日
    00
  • 使用Nginx+uWsgi实现Python的Django框架站点动静分离

    使用Nginx+uWsgi实现Python的Django框架站点动静分离的完整攻略如下: 1. 确认Nginx和uWsgi已经安装 首先需要确保Nginx和uWsgi已经安装并且正常运行。可以使用下面的指令来确认: nginx -v uwsgi –version 如果Nginx和uWsgi都已经安装成功,那么会分别显示它们的版本号。 2. 配置Django…

    css 2023年6月10日
    00
  • 一个jquery实现的不错的多行文字图片滚动效果

    实现多行文字图片滚动效果,可以使用jQuery库提供的方法。下面是实现过程的完整攻略。 步骤一:引入jQuery库和插件文件 在HTML头部,引入jQuery库和插件文件。插件文件可以从GitHub等源代码托管网站上下载获取。 <head> <script src="https://code.jquery.com/jquery-3…

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