根据浏览记录自动记录历史 tab
将自动记录路由变化
默认自动关闭具有 hidden
标识的路由,可以通过 keep-hidden-route
阻止这种行为
通过 ref
绑定 Tabs
进而通过外部调用关闭 tab 页
通过 before-add
钩子在标签增加前执行一些操作,若返回 false 或者返回 Promise 且被 reject,则阻止增加标签
通过 before-leave
钩子在标签切换前执行一些操作,若返回 false 或者返回 Promise 且被 reject,则阻止切换标签
通过 label
自定义标签页的标题内容
提示
自 1.4.0 起,label
插槽参数更改为 RouteLocationNormalizedLoaded
类型
自 1.4.0 起,Tabs 组件支持通过配置 contextmenu
展示右键菜单
提示
如果启用 refresh
功能,需要额外配置 refreshPath
属性,并向 vue-router 中增加对应路由信息
import {
createMemoryHistory,
createRouter as _createRouter,
createWebHistory,
Router,
} from 'vue-router'
import BaseLayout from '../layout/Layout.vue'
import enUS from './en-US'
import zhCN from './zh-CN'
import dev from './dev'
import { langs } from '../utils/index'
import type { RouteRecordRaw } from 'vue-router'
const routes: RouteRecordRaw[] = [
{
path: '/dev/refresh',
component: BaseLayout,
meta: { hidden: true },
children: [
{
path: '/dev/refresh',
component: () => import('../layout/Refresh.vue'),
meta: { hidden: true },
},
],
},
...enUS,
...zhCN,
]
export function createRouter(): Router {
const baseUrl = import.meta.env.BASE_URL
const router = _createRouter({
history: import.meta.env.SSR
? createMemoryHistory(baseUrl)
: createWebHistory(baseUrl),
routes: import.meta.env.MODE === 'production' ? routes : routes.concat(dev),
scrollBehavior(to, from, savedPosition) {
if (to.hash) {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
el: to.hash,
top: 94,
behavior: 'smooth',
})
}, 600) // Wait for the animation to finish
})
} else if (savedPosition) {
return savedPosition
} else {
return { top: 0 }
}
},
})
router.beforeEach((from) => {
if (from.path === '/') {
const lang = navigator.language
return langs.find((item) => item.key === lang) ? lang : langs[0].key
}
})
return router
}
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
type | 风格类型 | string | card / border-card | - |
tab-position | 标签位置 | string | top / right / bottom / left | top |
stretch | 标签的宽度是否自撑开 | boolean | - | false |
keep-hidden-route | 是否保持具有 hidden 标识的路由存在,默认自动关闭 | boolean | - | false |
contextmenu | 右键菜单配置 | boolean / object ({ refresh?: boolean, left?: boolean, right?: boolean, others?: boolean }) | - | false |
refreshPath | 刷新路径,用于刷新标签页 | string | - | - |
before-add | 增加标签之前的钩子,若返回 false 或者返回 Promise 且被 reject,则阻止增加。 | Function({ route, oldPath, list, close, closeOther }) | - | - |
before-leave | 切换标签之前的钩子,若返回 false 或者返回 Promise 且被 reject,则阻止切换。 | Function(activeName, oldActiveName) | - | - |
事件名 | 说明 | 类型 |
---|---|---|
tab-click | tab 被选中时触发 | (pane: TabsPaneContext, ev: Event) => void |
tab-change | activeName 变动后触发 | (name: TabPaneName) => void |
tab-remove | 关闭时触发 | (name: TabPaneName) => void |
方法名 | 说明 | 类型 |
---|---|---|
list | 浏览记录 | Ref<RouteLocationNormalizedLoaded[]> |
close | 从 tabs 中关闭指定路由的页面 | (path: string) => void |
closeOther | 从 tabs 中关闭除当前路由的其它路由 | () => void |
名称 | 说明 | 类型 |
---|---|---|
label | 自定义标题内容 | RouteLocationNormalizedLoaded |