请结合你的项目经验,谈谈 Vue Router 全局路由守卫的基本概念和典型用法,并描述一个你实际使用它的业务场景。
考察说明
考查对 Vue Router 全局守卫机制的理解及实际应用能力。
回答思路
- 【回答框架 1】Vue Router 全局守卫是注册在 router 实例上的导航钩子,包括 beforeEach、beforeResolve、afterEach,它们在路由导航确认前或后执行,用于控制导航流程。
- 【回答框架 2】beforeEach 在导航被确认前触发,常用于登录校验、权限控制、页面标题设置等;beforeResolve 在导航被确认前、所有组件内守卫和异步路由组件解析后触发,适合数据预取;afterEach 在导航完成后触发,适合埋点、滚动行为。
- 【回答框架 3】在项目中,我在 beforeEach 中检查用户登录状态,若未登录且目标路由需要认证,则重定向到登录页;使用 next(false) 取消导航,或 next('/login') 跳转。同时,通过 meta 字段标记哪些路由需要权限,实现动态权限过滤。
- 【回答框架 4】使用守卫时需注意 next() 必须被调用一次,否则导航会挂起;异步操作如 token 验证需在回调中调用 next,避免导航提前完成。另外,afterEach 不能修改导航,只适合执行副作用。
- 【关键点 1】全局守卫类型:beforeEach、beforeResolve、afterEach
- 【关键点 2】导航流程:守卫按顺序执行,next 决定导航放行或取消
- 【关键点 3】meta 字段可用于声明路由权限或标题
- 【关键点 4】实际场景:登录态校验、权限重定向、页面埋点
- 【关键点 5】易错点:忘记调用 next 或多次调用
- 【易错点 1】在异步验证后忘记调用 next 导致导航挂起
- 【易错点 2】在 afterEach 中试图修改导航(无效)
- 【易错点 3】未使用 meta 字段导致权限逻辑散落在守卫中