• vue-router(vue-router功能,跳转方式,路由守卫,路由懒加载,使用流程,3.x和4.x使用区别)


    1.vue-router实现的功能

    Vue Router 是 Vue.js (opens new window)官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:

    • - 嵌套路由映射
    • - 模块化的、基于组件的路由配置
    • - 路由参数、查询、通配符
    • - 基于 Vue.js 过渡系统的视图过渡效果
    • - 细致的导航控制
    • - 带有自动激活的 CSS class 的链接
    • - HTML5 历史模式或 hash 模式,在 IE9 中自动降级
    • - 自定义的滚动条行为
    • - URL 的正确编码

    2.路由跳转的方式

    1.声明式路由——router-link标签的to属性

    组件支持用户在具有路由功能的应用中 (点击) 导航。 通过 to 属性指定目标地址,默认渲染成带有正确链接的 a 标签.

    <router-link to="/user">router-link>

    2.编程式路由——router.push()/router.replace()

    router.push()

    1. // 字符串
    2. router.push('home')
    3. // 对象
    4. router.push({ path: 'home' })
    5. // 命名的路由(后续参数通过this.$router.params获取)
    6. router.push({ name: 'user', params: { userId: '123' }})
    7. // 带查询参数,变成 /register?plan=private(后续参数通过this.$router.query获取)
    8. router.push({ path: 'user', query: { userId: '123' }})

    router.replace

    与router.push方法类似,通过替换历史堆栈中的当前路由,以编程方式导航到一个新的 URL。

    router.push()和router.replace()的区别:

    • router.push()跳转后可以进行回退
    • router.replace()是进行替换历史堆栈中的当前路由,所以不能进行回退

    router.resolve()

    返回路由地址的标准化版本。

    const url = router.resolve({ path: 'user', query: { userId: '123' }})

     router.go()

    1. // 在浏览器记录中前进一步,等同于 history.forward()
    2. router.go(1)
    3. // 后退一步记录,等同于 history.back()
    4. router.go(-1)
    5. // 前进 3 步记录
    6. router.go(3)
    7. // 如果 history 记录不够用,那就默默地失败呗
    8. router.go(-100)
    9. router.go(100)

    3.导航守卫

    导航守卫包含:

    • - 全局前置守卫(router.beforeEach)
    • - 全局后置守卫(router.afterEach)_做一些路由离开后的操作,如窗口缩放等
    • - 全局解析守卫(router.beforeResolve)
    • - 路由独享的守卫(在路由配置上直接定义 beforeEnter 守卫)
    • - 组件内的守卫(组件内定义守卫)

    4.完成的导航解析流程

    • 1. 导航被触发。
    • 2. 在失活的组件里调用 beforeRouteLeave 守卫。
    • 3. 调用全局的 beforeEach 守卫。
    • 4. 在重用的组件里调用 beforeRouteUpdate 守卫(2.2+)。
    • 5. 在路由配置里调用 beforeEnter。
    • 6. 解析异步路由组件。
    • 7. 在被激活的组件里调用 beforeRouteEnter。
    • 8. 调用全局的 beforeResolve 守卫(2.5+)。
    • 9. 导航被确认。
    • 10. 调用全局的 afterEach 钩子。
    • 11. 触发 DOM 更新。
    • 12. 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

    5.路由懒加载

    路由懒加载可以实现在访问的时候去加载对应的组件,并且通过懒加载的方式实现代码的分包

    1. const router = new VueRouter({
    2. routes: [{ path: '/foo', component: () => import('./Foo.vue') }]
    3. })

    6.vue-router使用流程

    1. 1. 下载vue-router依赖
    2. 2. 编写路由配置,全局注入router
    3. 3. 在vue实例上进行挂载
    4. 4. 使用router-view用于承载页面

    7.router 3.x与4.x的区别

    官方文档 https://router.vuejs.org/zh/guide/migration/index.html

    • 3.x使用new VueRouter创建,4.x使用createRouter创建
    • 3.x的路由模式传入的是mode值为'hash'和'history',4.x传入的是history值为createWebHashHistory()和createWebHistory()
    • 3.x的挂载方式是通过router属性来挂载,4.x通过链式操作的方式进行挂载
    1. const router = new VueRouter({
    2. routes // (缩写) 相当于 routes: routes
    3. })
    4. // 4.x
    5. const router = VueRouter.createRouter({
    6. routes, // `routes: routes` 的缩写
    7. })
    1. // 3.x
    2. const router = new VueRouter({
    3. mode: 'history', // mode: 'hash'
    4. routes: [...]
    5. })
    6. // 4.x
    7. import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
    8. const router = createRouter({
    9. history: createWebHashHistory(), // history: createWebHistory()
    10. routes,
    11. })
    1. // 3.x
    2. new Vue({
    3. router,
    4. render: h => h(App),
    5. }).$mount('#app')
    6. // 4.x
    7. createApp(App).use(router).mount('#app')

  • 相关阅读:
    Spring学习笔记8 Bean的循环依赖问题
    OpenCV(三十五):凸包检测
    阿里架构师吐血整理,这是对“Spring家族”最完美的诠释
    【C++】STL——反向迭代器的模拟实现:迭代器适配器
    线程创建及生命周期
    RabbitMq高级特性-1
    Cellular/Wifi/Bluetooth频率
    内农大《嵌入式基础》实验二 C语言进阶和Makefile
    Linux history 命令相关使用以及配置
    【linux命令讲解大全】086.终端会话重现工具scriptreplay的使用方法详解
  • 原文地址:https://blog.csdn.net/qq_34569497/article/details/133970294