Skip to content
霞露小伙 — HfWang
On this page

vue-router3 / 4 的区别

全局前置守卫

vue-router-3

js
const router = new VueRouter({ ... })

router.beforeEach((
  to, // 目标路径
  from, // 当前路径
  next // 一定要调用该方法来 resolve 这个钩子
) => {
  // ...
})

next

  • next(): 进入下一个管道钩子
  • next(false): 中断导航
  • next('/') 或者 next({ name: 'xxx' }): 跳转到目标路径

vue-router-4

4.x 版本全局前置守卫不强制使用第三个入参 next, 但仍可以兼容 3.x 的写法

js
const router = createRouter({ ... })

router.beforeEach((
  to, // 目标路径
  from, // 当前路径
) => {
  // ...
  // 返回 false 以取消导航
  return false

  // return { name: 'xxx' }
})

路由过度效果

vue-router-3

html
<transition>
  <router-view></router-view>
</transition>

vue-router-4

html
<router-view v-slot="{ Component }">
  <transition name="fade">
    <component :is="Component" />
  </transition>
</router-view>

路由元信息 ts 定义

ts
// vite-env.d.ts
import 'vue-router'

declare module 'vue-router' {
  interface RouteMeta {
    a: string
    b: number
    // ...路由元信息里的内容
  }
}

动态路由

一般用于路由权限判断

js
const router = createRouter({
  history: createWebHistory(),
  routes: [{ path: '/:articleName', component: Article }],
})

router.addRoute({ path: '/about', component: About })

扩展:

删除路由: removeRoute

查看现有路由: getRoutes、hasRoute

本站中引用到的其他资料,如有侵权,请联系本人删除