根据浏览记录自动记录历史 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 |