请讲下vue-router的执行顺序
vue-router的执行顺序在前端开发中是一个重要概念,它涉及到路由的解析、组件的加载以及导航守卫的执行等过程。以下是一个清晰的执行顺序说明:
-
导航被触发:当用户点击一个路由链接或通过编程式导航(如
this.$router.push
)触发路由变化时,vue-router开始执行其流程。 -
全局前置守卫:首先执行的是全局前置守卫(
beforeEach
)。这是一个全局的守卫函数,在进入每个路由之前都会执行。它接收三个参数:即将要进入的路由对象(to
)、当前导航正要离开的路由对象(from
)以及一个用于决定是否展示要看到的路由页面的函数(next
)。 -
路由独享的守卫:如果在路由配置中定义了
beforeEnter
守卫,它会在全局前置守卫之后、组件内的守卫之前执行。这个守卫与全局前置守卫类似,但只会在进入特定的路由时触发。 -
组件内的守卫:在路由组件被渲染之前,可以执行组件内的守卫。这些守卫包括
beforeRouteEnter
、beforeRouteUpdate
(仅在路由参数变化时触发,如动态路由的参数改变)和beforeRouteLeave
。这些守卫函数允许你在路由发生变化时执行一些自定义的逻辑,比如数据获取、用户验证等。beforeRouteEnter
在进入组件时执行,此时组件实例还未被创建,因此无法访问组件实例的this
上下文。如果需要访问组件实例,可以通过next
函数传递一个回调,该回调将在组件实例被创建后调用。beforeRouteLeave
在离开组件时执行,可以用来阻止用户离开当前页面或执行一些清理操作。
-
解析异步路由组件:如果路由配置中包含了异步组件(即组件是通过
import()
动态导入的),vue-router会等待异步组件解析完成后再继续执行后续流程。 -
全局解析守卫(可选):在2.5+版本中引入了全局解析守卫(
beforeResolve
)。这个守卫在所有组件内守卫和异步路由组件被解析之后调用,但在导航被确认之前调用。 -
导航被确认:一旦所有的守卫函数都执行完毕且没有阻止导航,vue-router会确认导航,并开始执行与路由相关的视图更新操作。
-
全局后置守卫:最后执行的是全局后置守卫(
afterEach
)。这个守卫函数在所有路由守卫函数执行完毕后调用,此时路由已经跳转完成,可以用来执行一些清理工作或日志记录等操作。它接收两个参数:即将要进入的路由对象(to
)和当前导航正要离开的路由对象(from
)。但请注意,next
函数在这个守卫中不可用,因为它不会改变导航本身。 -
触发DOM更新:vue-router会触发Vue实例的DOM更新,以反映新的路由状态。这包括更新
<router-view>
组件来渲染新的路由组件和更新浏览器的URL地址栏(如果使用history
模式)。
综上所述,vue-router的执行顺序涉及多个阶段和守卫函数,它们按照特定的顺序执行以确保路由的正确解析和组件的正确加载。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具