以前都是用别人现成的多页签组件,自己也想尝试下做个Vue3的版本,目前还只有基本功能,慢慢完善。

主要思路
- 使用 Pinia 记录页签数据、处理操作
- 初始状态没有页签数据,使用默认路由数据填充
- 右击页签,显示更多关闭操作
- 使用el-scrollbar 实现横向滚动
store/tags 处理页签
页签的数据和操作都在store中,
- list是页签数据
- nameList保存页签路由的name,用于布局文件的keep-alive
<keep-alive :include="tags.nameList">
<component :is="Component"></component>
</keep-alive>
- 对页签的基本操作:增加页签、关闭、关闭其他、关闭全部
引入了持久化插件pinia-plugin-persistedstate,只要设置persist即可在页面刷新时保持页签数据不丢失,具体可以看专栏上篇文章《从零开始Vu3+Element Plus后台管理系统(六)——状态管理Pinia和持久化》
import {
defineStore } from 'pinia'
import {
ref, computed } from 'vue'
interface ListItem {
name: string
path: string
title: string
}
export const useTagsStore = defineStore(
'tags',
() => {
let list = ref<ListItem[]>([])
let show = computed(() => {
return list.value.length > 0
})
let nameList = computed(() => {
return list.value.map((item: ListItem) => item.name)
})
function delTagsItem(index: number) {
list.value.splice(index, 1)
}
function setTagsItem(data: ListItem) {
list.value.push(data)
}
function clearTags() {
list.value = []
}
function closeTagsOther(data: ListItem[]) {
list.value = data
}
return {
list, show, nameList, delTagsItem, setTagsItem, clearTags, closeTagsOther }
},
{
persist

本文介绍了如何使用Vue3和Pinia创建一个多页签组件,包括页签数据的存储、基本操作如增删以及利用el-scrollbar实现横向滚动。同时,通过引入pinia-plugin-persistedstate实现了数据在刷新后仍能保持。文章还讨论了页签过多时的处理策略以及关闭浮层的实现方法。

1203

被折叠的 条评论
为什么被折叠?



