请描述 Vue Router 中定义在组件内的路由守卫有哪些,并说明它们各自的触发时机。
考察说明
考察对 Vue Router 组件内路由守卫及其触发时机的掌握程度。
回答思路
- 【回答框架 1】Vue Router 的组件内路由钩子主要包含三个:beforeRouteEnter、beforeRouteUpdate 和 beforeRouteLeave。它们不同于全局守卫,是定义在组件内部、与组件实例生命周期相关的守卫。
- 【回答框架 2】beforeRouteEnter 在路由进入该组件时调用,此时组件实例尚未创建,因此无法访问 this。如果需要访问组件实例,可以通过回调函数的参数 next(vm => {}) 获取。
- 【回答框架 3】beforeRouteUpdate 在当前组件被复用且路由参数变化时调用,例如从 /user/1 导航到 /user/2。此时组件实例已经存在,可以访问 this,常用于响应参数变化进行数据更新。
- 【回答框架 4】beforeRouteLeave 在导航离开当前组件时调用,此时组件实例可用,可以访问 this。常用于确认用户是否要离开、保存草稿或清理定时器等操作。
- 【关键点 1】组件内钩子有三个:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave。
- 【关键点 2】beforeRouteEnter 时实例未创建,不能访问 this,但可通过 next 回调获取实例。
- 【关键点 3】beforeRouteUpdate 在组件复用时触发,可访问 this。
- 【关键点 4】beforeRouteLeave 在离开路由时触发,可访问 this。
- 【易错点 1】容易混淆 beforeRouteUpdate 与 beforeRouteEnter 的触发时机。
- 【易错点 2】在 beforeRouteEnter 中直接使用 this 会报错。