Vue3全家桶 - VueRouter - 【1】快速使用(创建路由模块 + 规定路由模式 + 使用路由规则 + RouterView-RouterLink)

VueRouter

  • Vue-Router官网
  • vue-routervue.js 官方给出的路由解决方案,能够轻松的管理 SPA 项目中组件的切换;
  • 安装:yarn add vue-router@4

快速使用

1.1 创建路由模块

  • 在项目中的 src 文件夹中创建一个 router 文件夹,在其中创建 index.js 模块;

  • 采用 createRouter() 创建路由,并暴露出去;

  • main.js 文件中初始化路由模块 app.use(router)

  • 示例代码:

    • router/index.js
    js 复制代码
    import { createRouter } from 'vue-router'
    
    // TODO 创建路由
    const router = createRouter({
        // 相关配置
    })
    
    export default router
    • main.js
    js 复制代码
    import { createApp } from 'vue'
    import App from './App.vue'
    import router from './router'  // 引入路由模块
    let app = createApp(App)
    
    app.use(router) // 初始化路由插件
    
    app.mount('#app')

1.2 规定路由模式

  • hsitory路由模式可采用:
  • createWebHashHistory()hash模式:
    • 它在内部传递的实际URL之前使用了一个哈希字符#
    • 由于这部分URL从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理;
  • createWebHistory()history模式,推荐使用;
    • 当使用这种历史模式时,URL会看起来很正常(URL中不带#号);
    • 由于我们的应用是一个单页的客户端应用,如果没有适当的服务器配置,用户在浏览器中直接访问URL,就会得到一个404错误,要解决这个问题,你需要做的就是在你的服务器上添加一个简单的回退路由,如果URL不匹配任何静态资源,它应提供与你的应用程序中的index.html相同的页面;
  • 示例代码:
    • history路由模式:

      js 复制代码
      import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
      
      // TODO 创建路由
      const router = createRouter({
        // TODO 规定路由模式
        history: createWebHistory(),
      })
      
      export default router
    • hash路由模式:

      js 复制代码
      import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
      
      // TODO 创建路由
      const router = createRouter({
        // TODO 规定路由模式
        history: createWebHashHistory(),
      })
      
      export default router

1.3 使用路由规则

  • routes配置路由规则:

    • path:路由匹配的URL
    • name:当路由指向此页面时显示的名字;
    • component:路由调用这个页面时加载的组件;
  • 路由模块用到的组件:

    • HomeVue.vue

      html 复制代码
      <script setup>
      import { ref, reactive, computed, onMounted } from 'vue'
      
      onMounted(() => {});
      </script>
      
      <template>
        <div class="home">
          网站首页界面
        </div>
      </template>
      
      <style scoped>
      .home {
        color: #fff;
        font-size: 24px;
        background-color: #ff0040;
      }
      </style>
    • BlogHomeVue.vue

      html 复制代码
      <script setup>
      import { ref, reactive, computed, onMounted } from 'vue'
      
      onMounted(() => {});
      </script>
      
      <template>
        <div class="blog-home">
          博客首页界面
        </div>
      </template>
      
      <style scoped>
      .blog-home {
        color: #fff;
        font-size: 24px;
        background-color: chartreuse;
      }
      </style>
  • 创建路由规则数组并使用:

    js 复制代码
    import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
    
    // TODO 创建路由规则数组
    const routes = [
      {
        path: '/home',
        name: 'home',
        component: () => import('@/views/HomeVue.vue')
      },
      {
        path: '/blog',
        name: 'blog',
        component: () => import('@/views/BlogHomeVue.vue')
      }
    ]
    
    // TODO 创建路由
    const router = createRouter({
      // TODO 规定路由模式
      history: createWebHistory(),
      routes
    })
    
    export default router

1.4 声明路由链接(RouterLink) 和 路由出口(RouterView)

  • 在组件模块中声明路由链接和占位符:

    • <router-link></router-link>:路由链接,to 属性则为点击此元素,需要切换的路由地址;

      • 🔺 注意

        • 如果需要配合激活类名使用,需要使用 active-class 进行指定;
        html 复制代码
        <router-link to="路径" active-class="类名" > xxx </router-link>
    • <router-view />:路由占位符(Vue2中的路由出口),路由切换的视图展示的位置;

  • 示例代码:

    • App.vue:(此处有可能URL地址中仍然带有#号,需要重启项目)

      html 复制代码
      <script setup>
      import { ref, reactive, computed, onMounted } from 'vue'
      
      onMounted(() => {});
      </script>
      
      <template>
      <!-- 路由链接,点击是路由地址会切换到属性 to 的地方 -->
        <router-link to="/home">首页</router-link> | 
        <router-link to="/blog">博客</router-link>
      
        <hr>
      
        <!-- 路由试图,路由切换组件展示的地方,路由出口 -->
        <router-view />
      </template>
  • 最终运行展示:

相关推荐
叫我一声阿雷吧12 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰12 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
周周不一样12 小时前
Andorid基础笔记2-jar&反射
笔记·pycharm·jar
jiayong2312 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
智者知已应修善业12 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
田八12 小时前
聊聊AI的发展史,AI的爆发并不是偶然
前端·人工智能·程序员
zhanghongbin0112 小时前
AI 采集器:Claude Code、OpenAI、LiteLLM 监控
java·前端·人工智能
IT_陈寒12 小时前
Python的列表推导式里藏了个坑,差点让我加班到凌晨
前端·人工智能·后端
吴声子夜歌13 小时前
ES6——正则的扩展详解
前端·mysql·es6
天若有情67313 小时前
【C++原创开源】formort.h:一行头文件,实现比JS模板字符串更爽的链式拼接+响应式变量
开发语言·javascript·c++·git·github·开源项目·模版字符串