Vue.js - 实现ElementUI的tabs标签拖动排序功能(拖拽标签改变顺序)
作者:hangge | 2024-12-13 08:38
在使用 Vue.js 和 Element UI 开发项目时,Tabs 组件常用于实现多标签切换功能。为了提升用户体验,我们有时会希望 Tabs 增加拖拽排序功能,使用户能够通过拖动标签改变其显示顺序。但原生组件并未提供这一功能,本文将详细介绍如何借助第三方库来实现。
1,准备工作
为了实现拖拽功能,我们需要使用一个轻量级的拖拽排序库 SortableJS。执行如下命令安装即可:
npm install sortablejs
2,样例演示
(1)下面是实现 tabs 标签拖拽排序的具体代码:
<template>
<el-tabs v-model="activeName" @tab-click="handleClick"
v-on="$listeners" id="drag-tabs">
<el-tab-pane v-for="item in tabList" :label="item.label" :key="item.name" :name="item.name">
{{item.label}}
</el-tab-pane>
</el-tabs>
</template>
<script>
import Sortable from "sortablejs"
export default {
data() {
return {
activeName: 'second',
tabList: [{
label: '用户管理',
name: 'first'
}, {
label: '配置管理',
name:'second'
}, {
label: '角色管理',
name: 'third'
}, {
label: '定时任务补偿',
name: 'fourth'
}]
};
},
mounted() {
this.initDrag();
},
methods: {
handleClick(tab, event) {
console.log(tab, event);
},
// 初始化拖动排序功能
initDrag() {
const el= document.querySelector('#drag-tabs .el-tabs__nav');
const _this = this;
// 拖动 tab 重新排序
Sortable.create(el, {
onEnd({ newIndex, oldIndex }) {
const tabList = _this.tabList;
const item = tabList.splice(oldIndex-1, 1)[0];
console.log(item,'item')
// 将 item 插入到 newIndex 位置
tabList.splice(newIndex-1, 0, item);
// 抛出事件(用于发送给后端更新排序数据)
_this.$emit('tabSortChanged', tabList, newIndex, oldIndex);
}
})
}
}
}
</script>
(2)运行效果如下:

全部评论(0)