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日

相关文章

  • 在IE下,当margin:0 auto;无法使得块级元素水平居中时

    在IE下,当margin: 0 auto;无法使块级元素水平居中的情况有很多,通常的解决方法是使用IE特有的hack或使用称为Flexbox的CSS3属性。以下是两种解决方法的示例说明: 方法一:使用IE特有的hack 当块级元素没有固定宽度或采用绝对定位时,margin: 0 auto;可能无效。一个解决办法是使用IE特有的hack,例如设置text-al…

    css 2023年6月9日
    00
  • 详解vue-flickity的fullScreen功能实现

    详解vue-flickity的fullScreen功能实现 简介 Vue-flickity 是基于 Flickity.js 的 Vue 组件库,采用了 Vue 组件编写方式,支持多种滑动方式和自定义样式,提供了许多有用的功能,其中之一就是全屏展示功能(fullScreen)。 本篇攻略将详细介绍如何在 Vue-flickity 中实现 fullScreen …

    css 2023年6月11日
    00
  • 一篇文章带你了解jQuery动画

    一篇文章带你了解jQuery动画 前言 jQuery是一款广受欢迎的JavaScript库,我们可以使用它来快速简单地实现各种交互效果,特别是动画效果。下面我们就来一起了解一下如何使用jQuery实现动画效果。 知识点概述 在使用jQuery实现动画效果之前,我们先来了解一下相关的知识点: 选择器 选择器是jQuery中最基础的组成部分,它用于定位需要操作的…

    css 2023年6月10日
    00
  • vue+iview 实现可编辑表格的示例代码

    下面是详细讲解“vue+iview 实现可编辑表格的示例代码”的完整攻略。 简介 在开发一些数据管理系统时,我们经常需要使用到表格来展示数据。同时,为了方便用户操作,我们还需要在表格上实现可编辑的功能。本文将会介绍如何使用vue+iview来实现这个功能。 步骤 安装依赖 首先,我们需要安装vue和iview的依赖: npm install vue ivie…

    css 2023年6月10日
    00
  • 详细介绍Scrapy shell的使用教程

    详细介绍Scrapy shell的使用教程 Scrapy是一款强大的Python网络爬虫框架,它对于数据爬取、处理和存储具有很高的效率和灵活性。而Scrapy shell则是Scrapy框架中一个非常实用的工具,可以在未定义爬虫规则前进行实时的网站数据爬取和交互调试。下面详细介绍Scrapy shell的使用教程。 1. 启动Scrapy shell 在命令…

    css 2023年6月9日
    00
  • 解决页面整体使用transform scale后高德地图点位点击偏移错位问题

    问题描述: 在网页中使用CSS的transform:scale方法放大缩小页面后,高德地图上的点位位置会出现偏移错位的问题。这可能会影响网页的交互效果。 解决方法: 这个问题的解决方案是将高德地图的点位标注放在一个单独的div中,并在这个div上应用transform:scale,以避免锚点偏移的问题。 步骤如下: 创建一个新的div,将高德地图点位标注的集…

    css 2023年6月10日
    00
  • 使用BootStrap建立响应式网页——通栏轮播图(carousel)

    让我为您讲解使用Bootstrap建立响应式网页通栏轮播图(carousel)的完整攻略。 1. 轮播图思路 通栏轮播图是一种经典的网页视觉设计方式。其基本思路是,在网页上设置一组横幅图片,通过轮播的方式定时向左或向右滑动,从而展现不同的广告或者信息。主要的视觉元素包括轮播组件(包括图片、标题和文字),箭头控制按钮(左和右)、指标控制按钮(可选)和全局容器。…

    css 2023年6月10日
    00
  • html转换为pdf案例的一些总结(多图推荐)

    关于“html转换为pdf案例的一些总结”,我可以给你提供以下完整攻略: 1. 背景 在实际开发中,我们经常需要将网页截图或者某些页面内容直接导出为PDF文件。而html转pdf正是这种需求的一种较成熟的解决方案。 2. 实现原理 利用现有第三方库(比如 wkhtmltopdf)将html内容转换为PDF格式,并提供PDF文件的下载或者在浏览器直接展示。 3…

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