

























1. 把 beforeEnter 和 beforeRouteLeave 用反
beforeEnter 是“进入某条路由前”的路由级守卫,适合鉴权、参数校验、重定向。beforeRouteLeave 是“离开当前组件前”的组件级守卫,适合弹窗清理、未保存确认、资源释放。beforeEnter 做离开清理,结果离开时根本不触发。2. 误以为 beforeRouteEnter 能直接拿 this
beforeRouteEnter 执行时组件实例还没创建,所以没有 this。next(vm => { ... }) 在实例创建后访问组件。beforeRouteUpdate、beforeRouteLeave 可以直接用 this,因为组件已存在。3. 误判触发时机:query/params 改变不一定会销毁组件
query(如 ?tabname=tuan)常常是复用组件,不会重新创建实例。watch($route) 或 watch(() => $route.query.xxx)beforeRouteUpdatecreated,导致切 query 后不刷新数据。4. 忽略守卫层级顺序导致判断重复或冲突
beforeEach -> 路由独享 beforeEnter -> 组件内 beforeRouteEnter。5. 在守卫里忘记放行
next(),页面卡死。true/false/redirect)。6. 异步逻辑没处理好,造成闪跳或重复跳转
7. 组件离开清理不彻底,导致“脏状态”回流
beforeRouteLeave 里先关闭预约管理弹窗,再 next(),避免切走后状态残留。8. 误用 beforeEnter 处理组件内部 tab 行为
/schedule/index?tabname=tuan 这种通常是同一路由容器内切换。beforeEnter 只在进入该路由记录时触发,不是为组件内部 tab 切换设计的。query 到状态映射,必要时配合 beforeRouteUpdate 或 watcher。9. 把“权限控制”和“UI 展示控制”混在一起
10. 不区分“路由守卫”与“生命周期钩子”
mounted 里,导致先渲染后跳转,体验差。beforeEnter / beforeEachbeforeRouteEnter(无 this,用 next(vm=>...))beforeRouteUpdatebeforeRouteLeave路由守卫最常见误区不是“不会写”,而是“写在了错误层级和错误时机”。
先判断你要解决的是“路由进入权限”“组件复用更新”还是“离开清理”,再选守卫,问题会少一大半。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。