请讲下vue-router的执行顺序

vue-router的执行顺序在前端开发中是一个重要概念,它涉及到路由的解析、组件的加载以及导航守卫的执行等过程。以下是一个清晰的执行顺序说明:

  1. 导航被触发:当用户点击一个路由链接或通过编程式导航(如this.$router.push)触发路由变化时,vue-router开始执行其流程。

  2. 全局前置守卫:首先执行的是全局前置守卫(beforeEach)。这是一个全局的守卫函数,在进入每个路由之前都会执行。它接收三个参数:即将要进入的路由对象(to)、当前导航正要离开的路由对象(from)以及一个用于决定是否展示要看到的路由页面的函数(next)。

  3. 路由独享的守卫:如果在路由配置中定义了beforeEnter守卫,它会在全局前置守卫之后、组件内的守卫之前执行。这个守卫与全局前置守卫类似,但只会在进入特定的路由时触发。

  4. 组件内的守卫:在路由组件被渲染之前,可以执行组件内的守卫。这些守卫包括beforeRouteEnterbeforeRouteUpdate(仅在路由参数变化时触发,如动态路由的参数改变)和beforeRouteLeave。这些守卫函数允许你在路由发生变化时执行一些自定义的逻辑,比如数据获取、用户验证等。

    • beforeRouteEnter在进入组件时执行,此时组件实例还未被创建,因此无法访问组件实例的this上下文。如果需要访问组件实例,可以通过next函数传递一个回调,该回调将在组件实例被创建后调用。
    • beforeRouteLeave在离开组件时执行,可以用来阻止用户离开当前页面或执行一些清理操作。
  5. 解析异步路由组件:如果路由配置中包含了异步组件(即组件是通过import()动态导入的),vue-router会等待异步组件解析完成后再继续执行后续流程。

  6. 全局解析守卫(可选):在2.5+版本中引入了全局解析守卫(beforeResolve)。这个守卫在所有组件内守卫和异步路由组件被解析之后调用,但在导航被确认之前调用。

  7. 导航被确认:一旦所有的守卫函数都执行完毕且没有阻止导航,vue-router会确认导航,并开始执行与路由相关的视图更新操作。

  8. 全局后置守卫:最后执行的是全局后置守卫(afterEach)。这个守卫函数在所有路由守卫函数执行完毕后调用,此时路由已经跳转完成,可以用来执行一些清理工作或日志记录等操作。它接收两个参数:即将要进入的路由对象(to)和当前导航正要离开的路由对象(from)。但请注意,next函数在这个守卫中不可用,因为它不会改变导航本身。

  9. 触发DOM更新:vue-router会触发Vue实例的DOM更新,以反映新的路由状态。这包括更新<router-view>组件来渲染新的路由组件和更新浏览器的URL地址栏(如果使用history模式)。

综上所述,vue-router的执行顺序涉及多个阶段和守卫函数,它们按照特定的顺序执行以确保路由的正确解析和组件的正确加载。

posted @   王铁柱6  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示