Vue 路由守卫怎么在组件内使用 beforeRouteLeave 处理离开

星雪大大_5551

星雪大大_5551

2026-10-23

451人浏览

原创

beforerouteleave用于拦截路由离开,需手动判断isdirty状态并调用next(false)中断后弹窗确认,vue 3中必须在setup顶层用onbeforerouteleave注册。

vue 路由守卫怎么在组件内使用 beforerouteleave 处理离开

在组件内用 beforeRouteLeave 拦截离开操作,核心是“判断是否该拦 + 拦了之后怎么让用户选”。它不是自动弹窗,而是给你一个机会做逻辑控制,尤其适合表单未保存场景。

必须写在组件定义里,不能放异步或条件分支中

Vue 3(Composition API)必须用 onBeforeRouteLeave,且要在 setup() 顶层调用:

  • ✅ 正确:直接在 setup() 开头写 onBeforeRouteLeave((to, from, next) => { ... })
  • ❌ 错误:放在 watch 回调、if 判断块里,或等接口返回后再注册 —— 守卫不会生效
  • Options API 更简单:直接作为组件选项属性,写 beforeRouteLeave(to, from, next) { ... }

关键要自己判断“要不要拦”,不能只靠守卫触发

守卫本身不决定拦不拦,它只是个钩子。你需要配合一个状态变量(比如 isDirty)来标记数据是否被修改:

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17.2万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习