掌握Vue Router:轻松实现单页面应用的路由管理

引言

在现代前端开发中,单页面应用(SPA)逐渐成为主流,而Vue.js作为一款渐进式框架,也因其简洁和高效受到了广泛欢迎。在开发单页面应用时,我们常常需要处理不同页面之间的导航与切换,这就需要用到路由管理。而Vue Router正是为了解决这一问题而生的。那么今天我们将了解如何在Vue项目中配置和使用Vue Router,实现组件之间的无缝切换,打造出用户体验更佳的Web应用。

Vue Router

Vue 中所有的 xxx.vue 文件都是一个组件,这些组件最终会被 Vue 读取,并编译成一段 div 结构,挂载在唯一的html文件中,所以,想要实现组件之间的切换很简单。

但是,想要将某些组件当成页面(每个页面对应的url都是唯一的)来用,默认情况下就行不通

那么,我们就需要一个可以将代码片段的切换模拟成页面的跳转的样子的这样一个手段,这就是vue-router

路由(Route)

路由是将特定的 URL 映射到特定的组件。每个路由规则通常包含一个路径和对应的组件。通过定义路由,我们可以在不同 URL下显示不同的组件。例如,当用户访问 /home 路径时,显示Home组件;当用户访问 /about 路径时,显示About组件。

路由视图(Router View)

<router-view> 是一个占位组件,用于渲染与当前URL匹配的组件。在应用模板中指定组件渲染的位置。例如,如果当前路径是 /home,那么 <router-view> 会渲染Home组件。比如:

html 复制代码
<div id="app">
    <router-view></router-view>
</div>

实例

接下来,我们将通过一个小 demo 来展示如何在Vue项目中安装和配置Vue Router,并演示一些常见的用法和技巧。

我这里采用的是类似掘金首页的路由跳转。注意点击跳转时,URL 是否有变化,变化了的就是页面进行了跳转也就是路由跳转。

路由配置

安装Vue Router

在开始使用Vue Router之前,我们需要先安装它。可以使用npm进行安装:

js 复制代码
npm install vue-router@4

安装完成后,我们需要在Vue项目中配置Vue Router。

创建路由实例

首先,创建一个路由配置文件(如src/router/index.js),在其中定义路由规则并创建路由实例:

js 复制代码
import { createRouter, createWebHistory } from "vue-router";
import Home from "../pages/Home.vue";
import Bot from "../pages/Bot.vue";

const router = createRouter({
    history: createWebHistory(),
    routes: routes,
})
const routes = [
    {
        path: '/',
        redirect: '/home'
    },
    {
        path: '/home',
        component: Home,
        children: [
            {
                path: '/home',
                redirect: '/home/suggest'
            },
            {
                path: '/home/newest',
                component: () => import('../pages/home/Newest.vue')
            },
            {
                path: '/home/suggest',
                component: () => import('../pages/home/suggest.vue')
            }
        ]
    },
    {
        path: '/bot',
        component: Bot
    },
    {
        path: '/hot',
        component: () => import('../pages/Hot.vue')
    }
]
export default router

我们的路由配置定义了多个静态和动态路由,同时使用了嵌套路由和重定向。

  1. 根路径重定向:访问根路径 / 时,会自动重定向到 /home

  2. /home 路由及其子路由:/home 路由加载 Home 组件,并且有三个子路由:

  • /home 重定向到 /home/suggest
  • /home/newest 动态加载并显示 Newest.vue 组件。
  • /home/suggest 动态加载并显示 suggest.vue 组件。
  1. /bot 路由:访问 /bot 时,会加载并显示 Bot 组件。

  2. /hot 路由:访问 /hot 时,会动态加载并显示 Hot 组件。

动态加载组件

细心的朋友会发现我们在加载组件时,有的组件用了不同的方式,部分组件使用了动态加载(异步组件)。这种方式有助于减小初始加载包的体积,提升页面加载速度。不需要再import��入组件。也就是如下这种方式:

js 复制代码
{
    path: '/home/newest',
    component: () => import('../pages/home/Newest.vue')
}

嵌套(二级)路由

我们定义了 嵌套路由 也可以说是 二级路由,特别是在 /home 路由下,有多个子路由。子路由路径可以是相对于父路由的,也可以是绝对路径。

在Vue实例中使用路由

然后,在入口文件(如src/main.js)中将路由实例引入到Vue实例中并使用它:

js 复制代码
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

createApp(App).use(router).mount('#app')

导航与跳转

在Vue Router中,导航与跳转是指在不同的路由之间进行切换。Vue Router提供了两种主要的导航方式:使用<router-link>组件和编程式导航。

使用 <router-link> 进行跳转

<router-link> 是用于创建导航链接的组件。它类似于HTML中的 <a> 标签,但具有Vue Router的特殊功能。在我们父组件App.vue中:

html 复制代码
<template>
  <div>
    <nav>
      <router-link to="/home">首页</router-link> |
      <router-link to="/bot">BOT</router-link> |
      <router-link to="/hot">沸点</router-link>
    </nav>

    <!-- 页面 -->
     <router-view></router-view>
  </div>
</template>

to 属性指定目标路径。点击链接时,Vue Router会自动更新 URL 并渲染对应的组件。

编程式导航

编程式导航是指通过编写代码来实现路由的跳转,而不是通过用户点击导航链接。在我们Bot.vue组件中使用 $router.push 方法进行导航:

html 复制代码
<template>
    <div>
        <p>BOT page</p>
        <button @click="toHot">去沸点</button>
    </div>
</template>

<script setup>
import { useRouter } from 'vue-router';

const router = useRouter();

const toHot = () => {
    // 跳转到沸点
    // router.push('/hot');
    router.push({ path: '/hot', query: {id: 1}});
}
</script>
  • useRouter是Vue Router 4中提供的组合式API钩子,用于获取路由实例。与选项式API中的this.$router类似,useRouter在组合式API中用于访问路由实例。

  • 定义了一个按钮,当按钮被点击时,会调用toHot方法。使用router.push方法跳转到/hot路径,并传递查询参数id=1

带参数的路由跳转

带参数的路由跳转可以在路径中包含动态参数,或者通过查询参数传递数据。

1. Query:

Query 参数通常用于在URL中附加额外的信息。它们显示在URL的查询字符串部分,并且适用于所有路由,无论是否定义了动态路径参数。

js 复制代码
router.push({ path: '/hot', query: {id: 1}});

在目标组件中,可以通过this.$route.query.id来访问这个参数。 传递的URL会变成类似于 /hot?id=1 的形式。

2. Params:

Params 参数用于动态路径段中,适用于定义了路径参数的路由。例如,显示用户详情的路由 /user/:id

js 复制代码
// 通过编程式导航传递 params 参数
router.push({ name: 'user', params: { id: 123 } });
// 使用<router-link>
<router-link :to="{ name: 'user', params: { id: 123 } }">User</router-link>

在目标组件中可以通过this.$route.params.id来访问这个参数。传递的URL会变成类似于 /user/123 的形式。

总结

今天,我们学习了Vue Router的使用,掌握了如何配置Vue Router、使用不同方式进行路由跳转以及在跳转时传递参数。

希望通过今天的分享,能够帮助你掌握Vue Router的基本用法,从而在实际项目中更好地管理和组织你的路由。无论你是Vue的新手还是有一定经验的开发者,相信都能为你带来一些有价值的启发和帮助。期待下次的分享。

相关推荐
活宝小娜1 小时前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点1 小时前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow1 小时前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js
我开心就好o1 小时前
uniapp点左上角返回键, 重复来回跳转的问题 解决方案
前端·javascript·uni-app
开心工作室_kaic2 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
刚刚好ā2 小时前
js作用域超全介绍--全局作用域、局部作用、块级作用域
前端·javascript·vue.js·vue
沉默璇年3 小时前
react中useMemo的使用场景
前端·react.js·前端框架
yqcoder3 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript
2401_882727573 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架
SoaringHeart4 小时前
Flutter进阶:基于 MLKit 的 OCR 文字识别
前端·flutter