使用ant design vue中a-table实现自定义列拖拽 以及解决列拖拽时表格大小跟着变化的问题

函数和css部分如下:

<script lang="ts">

import { TableColumnsType } from "ant-design-vue"

import { ref, reactive } from "vue";

let isHidden = ref<boolean>(false);

// columns是关于列的配置项,在需要被拖拽的列中加入resizable: true

//注意!写了resizable: true属性的列一定定义width,方便后面计算列宽,没写resizable: true一定不能定义width,否则表格整体会随着列的拖拽一起变宽

const columns = ref<TableColumnsType>([

    { title: 'id', dataIndex: 'id', key: 'id', width: 80, resizable: true, minWidth: 80},

    { title: 'name', dataIndex: 'name', key: 'name', ellipsis: true, resizable: true, minWidth: 100 ,width: 150 },

    { title: 's', dataIndex: 's', key: 's', ellipsis: true, resizable: true, width:150},

    { title: 'v', dataIndex: 'v', key: 'v', ellipsis: true },

    { title: 't', dataIndex: 't', key: 't', ellipsis: true },

    { title: 'e', dataIndex: 'e', key: 'e' },

]);

// 列表中的data

const getList = reactive([

    {id:'1',name:'name',s:'s',v:'0.1',t:'2023',e:true},

    {id:'1',name:'name',s:'s',v:'0.1',t:'2023',e:true},

    {id:'1',name:'name',s:'s',v:'0.1',t:'2023',e:true},

    {id:'1',name:'name',s:'s',v:'0.1',t:'2023',e:true},

    {id:'1',name:'name',s:'s',v:'0.1',t:'2023',e:true}

])

//实现列拖拽功能的函数

const handleResizeColumn = (w: number, col: any) => {

    if (col) {

        col.width = w;

    }

    var width = Number(columns.value[0].width) + Number(columns.value[1].width) + Number(columns.value[2].width)

    if (width>550) {    //当被拖拽的三列宽度相加超过一定数值时 将超出部分隐藏

        columns.value[5].ellipsis = true

        isHidden.value = true

    } else {

        columns.value[5].ellipsis = false

        isHidden.value = false

    }

}

export default ({

    setup() {

        getList

        return {

            getList,

            isHidden,

            columns,

            handleResizeColumn

        };

    },

});

</script>

<style scoped lang="scss">

    .table_hidden {

        overflow: hidden;

    }

</style>

html部分如下:

<template>

        <div :class="isHidden ? 'table_hidden' : ' '" style="width: 900px; margin-left: 25%;">

            <!-- 当isHidden为true时 为div加上table_hidden的样式 即超出部分隐藏 这样拖拽时跟着移动的表格部分就会被隐藏了 -->

            <!-- 也可以直接为这个div加上超出部分隐藏的属性 我是因为还有一些特殊的需求不能让他直接隐藏 只能判断当宽度大于一定值时再隐藏 -->

            <a-table :columns="columns" :data-source="getList" class="list_body"

                 style="width:100%" @resizeColumn="handleResizeColumn">

            </a-table>

            <!-- @resizeColumn="handleResizeColumn" 设置列拖拽方法 handleResizeColumn是拖拽时调用的函数-->

        </div>

</template>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Ant Design Vue表格组件支持拖拽的功能。具体实现方法可以参考官方文档的示例代码。在表格组件,可以通过设置 `drag-and-drop` 属性为 `true` 来开启拖拽的功能。同,还需要设置 `columns` 属性为一个数组,数组的每个元素表示一的配置信息,包括的标题、数据字段、宽度等。在拖拽,可以通过监听 `onColumnDragEnd` 事件来获取拖拽后的的顺序信息,然后根据顺序信息重新渲染表格。 ### 回答2: ant-design-vue table是一个基于Vue框架构建的图形用户界面组件库,其table组件提供了丰富的功能,其包括拖拽。下面我们来详细介绍一下如何实现ant-design-vue table拖拽功能。 首先,我们需要在table组件的配置增加一个属性:columnsResizable,将其设置为true,该属性作用是启用宽调整的功能。然后,我们需要在table组件的html增加一个slot,定义头的内容,方便后续处理拖拽事件。关于slot的具体用法请自行查阅官方文档。 接下来,我们需要通过样式将table头设置为可拖拽的状态。可以通过设置th元素的cursor属性为col-resize来实现,同为th元素绑定mousedown事件,当用户拖拽,就可以触发该事件,然后调用对应的处理函数。 在处理函数,我们需要先获取当前头所在的位置,然后记录下鼠标的初始位置。接着监听mousemove事件,当鼠标移动,计算出当前头的目标宽度,并通过css样式设置头的宽度,同更新对应的宽度。最后,当鼠标松开,释放事件监听。 除此之外,我们还需要注意一些细节问题,例如拖拽保持整个table的宽度不变,下一的位置和宽度需要同步调整等。这些都需要我们在代码仔细处理,以避免出现意外的问题。 总之,通过以上步骤,我们就可以成功实现ant-design-vue table拖拽功能了。当然,具体实现方式可能因人而异,这里只是提供一种参考思路,希望对大家有所帮助。 ### 回答3: Ant Design Vue是一款基于Vue的企业级UI库,它提供了丰富的组件和样式,可以直接应用于业务。其table组件支持拖拽,可以使用户根据自身需求自由排序tableAnt Design Vuetable组件可以通过对象属性的方式自定义table,其包括每一的数据源、表头、宽度等属性。在这些属性,index属性会在表头显示的序号,同也可以用作table的排序。 拖拽实现可以通过拖拽事件来实现拖拽事件包括dragstart、dragover、drop和dragend四种事件。其dragstart事件在拖动元素触发,可以在事件将当前的index属性传递给被拖动元素;dragover事件在拖动元素进入目标元素触发,可以在事件获取目标的index属性,并用作当前和目标的交换;drop事件在拖动元素松开鼠标触发,可以在事件触发交换的逻辑;dragend事件在拖动元素结束触发,可以在事件清空拖动元素的状态。 在实现拖拽的过程,还需要考虑数据的绑定。拖拽并不会改变table的数据源,因此需要手动更新数据源每一的index属性。同,在交换候,需要考虑表头和单元格数据的同步更新。 总的来说,Ant Design Vuetable组件拖拽实现相对简单,可以通过拖拽事件和数据源的操作来实现。在用户体验上,拖拽可以大大提高用户对table的操作效率,同也增加了table的交互性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值