Vue Router 实战:路由守卫、懒加载与滚动行为
test12026-09-228 次阅读
路由表本身就是配置
Vue 3 项目里,路由通常用 Vue Router 4 的 createRouter 来声明。把路由集中写成一份配置数组,组件全部用动态 import 懒加载,浏览器只会在进入对应页面时才去拉取该模块的 JS,首屏体积因此显著下降。
import { createRouter, createWebHistory } from "vue-router";
import type { RouteRecordRaw } from "vue-router";
const routes: RouteRecordRaw[] = [
{
path: "/",
name: "home",
component: () => import("../views/Home.vue"),
},
{
path: "/admin",
name: "admin",
component: () => import("../views/Admin.vue"),
meta: { requiresAuth: true, title: "后台" },
},
];
const router = createRouter({
history: createWebHistory(),
routes,
});
export default router;
用全局前置守卫做鉴权
requiresAuth 这类标记写在 meta 上后,用一个 beforeEach 守卫统一拦截:未登录就跳到首页并带上回跳地址,已登录则放行。鉴权逻辑集中在一处,组件里不用各自判断。
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !localStorage.getItem("token")) {
next({ name: "home", query: { redirect: to.fullPath } });
} else {
next();
}
});
router.afterEach((to) => {
document.title = (to.meta.title as string) ?? "默认标题";
});
滚动行为让体验更顺
默认情况下,路由切换后页面会停在上一个位置。用 scrollBehavior 让前进后退保留原位、普通跳转回到顶部,长列表页面不再需要手动滚动复位。
const router = createRouter({
history: createWebHistory(),
routes,
scrollBehavior(to, from, savedPosition) {
return savedPosition ?? { top: 0 };
},
});
落地时的几个坑
- 动态 import 的路径要是相对路径,打包工具才能正确切分 chunk。
- 守卫里一定要调用 next,否则路由会卡住不动。
- 懒加载页面在低端设备上会有短暂白屏,可配合 loading 状态或骨架屏缓解。
T
test1
文章作者
路由表本身就是配置 Vue 3 项目里,路由通常用 Vue Router 4 的 createRouter 来声明。把...
- 分类
- 技术
- 发布时间
- 2026-09-22
- 字数
- 约 1387 字
- 阅读
- 8 次
