刚用 Vue CLI 创建完项目,是不是发现只能写一个页面?想实现“首页→关于页→列表页”的切换,却不知道该怎么操作?其实,只要学会 vue-router,就能轻松实现页面之间的无缝跳转,打造完整的单页应用(SPA)。
vue-router 是 Vue 官方配套的路由解决方案,和 Vue 深度集成,专门用于解决单页应用的页面导航问题[superscript:1]。它不需要页面重新加载,就能实现 URL 变化和页面内容切换,让用户体验更流畅,也是 Vue 开发中不可或缺的核心工具。
今天这篇博客,全程面向零基础小白,无复杂原理、全是实操步骤,从 vue-router 的基本认知、安装配置,到基础跳转、参数传递、嵌套路由,一步步教你吃透 vue-router,看完就能上手实战!
一、先搞懂:vue-router 是什么?为什么要用?
简单来说,vue-router 就是 Vue 项目的“页面导航管家” ——它管理着 URL 路径和 Vue 组件之间的映射关系,当用户点击导航、切换 URL 时,它会自动渲染对应的组件,而不用重新加载整个页面[superscript:7]。
举个通俗的例子:我们平时用的手机 App(比如微信),切换“聊天”“通讯录”“发现”页面时,页面不会重新加载,只是内容切换,这就是路由的作用。vue-router 就是把这种体验,搬到了 Vue 网页开发中。
核心作用(小白必知):
- 实现页面无刷新跳转:URL 变化,页面内容切换,不用重新请求服务器,提升用户体验[superscript:4]。
- 管理路由规则:明确 URL 路径对应哪个组件,逻辑清晰,便于维护。
- 支持多种跳转方式:可以通过点击导航跳转,也可以通过代码控制跳转(编程式导航)[superscript:4]。
- 提供丰富功能:支持路由参数传递、嵌套路由、路由守卫、404 页面配置等,满足复杂项目需求[superscript:4]。
一句话总结:只要做 Vue 单页应用(90% 的 Vue 项目都是),就必须用 vue-router,它是实现页面跳转的“标配工具”[superscript:7]。
二、前置条件:使用 vue-router 前需要准备什么?
和使用 Ant Design Vue 一样,vue-router 也需要在 Vue 项目中使用,提前准备好以下两个条件即可:
- 已安装 Node.js(LTS 版本):确保 npm 可用,用于安装 vue-router 包。
- 已创建 Vue 项目:无论是用 Vue CLI 创建的 Vue 2 还是 Vue 3 项目,都能使用 vue-router,但注意版本对应(重点!避免报错)。
版本对应规则(必看,避坑关键):
- Vue 3 项目:使用 vue-router 4.x 版本(目前主流,本文重点讲解)。
- Vue 2 项目:使用 vue-router 3.x 版本(安装命令和配置略有差异,文末补充)。
三、核心操作:在 Vue 3 项目中安装并配置 vue-router
本文以「Vue 3 + vue-router 4.x」为例,全程实操,步骤简单,小白跟着敲命令、改代码就行,全程无坑。
1. 进入 Vue 项目目录
打开终端(cmd / Mac 终端),进入你已经创建好的 Vue 项目目录(比如 vue-demo):
cd vue-demo # 替换成你的 Vue 项目名称
2. 安装 vue-router
执行安装命令,使用 npm 安装 vue-router 4.x 版本(Vue 3 专用):
npm install vue-router@4 --save
补充说明:
- --save 表示将 vue-router 添加到项目依赖中,后续项目打包、部署时会自动包含。
- 如果是 Vue 2 项目,安装命令为:npm install vue-router@3 --save(指定 3.x 版本)[superscript:3]。
- 也可以用 Vue CLI 快速添加路由:vue add router,CLI 会自动完成安装和基础配置,小白也可以直接使用[superscript:5]。
安装完成后,终端显示“added x packages”,说明安装成功。
3. 创建路由配置文件(关键步骤)
安装完成后,需要手动创建路由配置文件,定义路由规则(URL 路径对应哪个组件)。
- 在 src 目录下,新建一个 router 文件夹,然后在 router 文件夹中新建 index.js 文件(路由配置核心文件)。
- 打开 src/router/index.js 文件,编写路由配置代码:
- createWebHistory:路由模式为 HTML5 模式,URL 中没有 # 号,美观且符合常规 URL 习惯[superscript:3];如果需要兼容低版本浏览器,可替换为 createWebHashHistory(哈希模式,URL 带 # 号)[superscript:2]。
- routes 数组:每一条路由包含 path(URL 路径)、component(对应组件),name 可选,用于后续编程式导航时简化路径[superscript:6]。
4. 创建路由对应的组件
上面的配置中,我们导入了 HomeView 和 AboutView 两个组件,现在需要创建这两个组件(组件放在 src/views 文件夹中,规范命名):
- 在 src 目录下,新建 views 文件夹(用于存放页面级组件,和 components 区分开)。
- 在 views 文件夹中,新建 HomeView.vue 文件,编写首页组件内容:
- 在 views 文件夹中,新建 AboutView.vue 文件,编写关于页组件内容:
5. 在 main.js 中挂载路由
路由配置完成后,需要在项目入口文件(main.js)中挂载路由,让整个项目都能使用路由功能。
打开 src/main.js 文件,修改内容如下(新增代码已标注):
import { createApp } from 'vue'
import App from './App.vue'
// 新增:导入路由实例
import router from './router'
const app = createApp(App)
app.use(router) // 挂载路由(关键步骤,必须在 mount 之前)
app.mount('#app')
注意:app.use(router) 必须放在 app.mount('#app') 之前,否则路由无法生效[superscript:2]。
6. 在 App.vue 中添加导航和路由出口
最后一步:在根组件 App.vue 中,添加导航链接(点击跳转)和路由出口(渲染当前路由对应的组件),这是路由显示的核心。
打开 src/App.vue 文件,替换内容如下:
<template>
<div id="app">
<!-- 导航链接:使用 router-link 组件,替代 a 标签,无刷新跳转 -->
<nav>
<router-link to="/">首页</router-link>
<router-link to="/about" style="margin-left: 20px;">关于我们</router-link>
</nav>
<!-- 路由出口:当前 URL 对应的组件,会渲染到这里 -->
<router-view></router-view>
</div>
</template>
<style>
/* 可选:给激活的导航添加样式 */
.router-link-active {
color: #42b983;
text-decoration: none;
font-weight: bold;
}
</style>
关键说明:
- router-link:vue-router 提供的导航组件,替代传统的 a 标签,点击时不会刷新页面,to 属性指定跳转的 URL 路径[superscript:2]。
- router-view:路由出口,所有匹配当前 URL 的组件,都会渲染到这个标签中,相当于“组件容器”[superscript:2]。
- router-link-active:vue-router 自动给当前激活的导航添加的类名,可自定义样式,区分当前所在页面[superscript:3]。
四、实操测试:运行项目,查看路由跳转效果
所有配置完成后,启动项目,测试路由跳转是否正常:
npm run dev # 或 npm run serve
启动成功后,浏览器访问 http://localhost:8080,会看到:
- 页面显示“首页”内容,导航中“首页”处于激活状态(样式变化)。
- 点击“关于我们”,URL 会变成 http://localhost:8080/about,页面切换为“关于我们”内容,无刷新、无卡顿。
- 点击浏览器后退按钮,能回到首页,路由历史记录正常。
到这里,你已经成功实现了 vue-router 的基础跳转!是不是超级简单?
五、vue-router 核心用法(小白必学)
掌握了基础配置和跳转后,再学习几个核心用法,满足日常开发需求,小白重点掌握前3个即可。
1. 编程式导航(通过代码控制跳转)
除了用 router-link 点击跳转,还可以通过代码控制跳转(比如点击按钮跳转),核心使用 router.push() 方法[superscript:4]。
示例(在 HomeView.vue 中添加按钮,点击跳转到关于页):
<template>
<div class="home">
<h1>首页</h1>
<p>这是 vue-router 实战的首页,点击导航可切换页面</p>
<!-- 按钮点击跳转 -->
<button @click="goToAbout">点击跳转到关于页</button>
</div>
</template>
<script setup>
// 导入 useRouter 方法,获取路由实例
import { useRouter } from 'vue-router'
const router = useRouter()
// 定义跳转函数
const goToAbout = () => {
// 方式1:跳转指定路径
router.push('/about')
// 方式2:通过路由名称跳转(需要给路由配置 name)
// router.push({ name: 'About' })
}
</script>
补充:router.push() 会添加一条新的路由历史记录,点击后退能回到上一页;如果想替换当前历史记录(后退不会回到上一页),可用 router.replace()。
2. 路由参数传递(页面间传值)
开发中经常需要在页面间传递参数(比如从列表页跳转到详情页,传递商品 ID),vue-router 支持两种常用传参方式,小白重点掌握 query 传参。
方式1:query 传参(推荐,类似 GET 请求,参数显示在 URL 中)
// 1. 跳转时传递参数(以首页跳转到关于页为例)
// HomeView.vue 中
const goToAbout = () => {
// 传递参数:id 和 name
router.push({
path: '/about',
query: {
id: 1,
name: 'vue-router 教程'
}
})
}
// 2. 接收参数(在 AboutView.vue 中)
<script setup>
import { useRoute } from 'vue-router'
const route = useRoute()
// 接收 query 参数
console.log(route.query.id) // 输出 1
console.log(route.query.name) // 输出 vue-router 教程
</script>
// 3. 页面中使用参数
<template>
<div class="about">
<h1>关于我们</h1>
<p>接收的参数:ID={{ route.query.id }}, 名称={{ route.query.name }}</p>
</div>
</template>
特点:参数会显示在 URL 中(如 /about?id=1&name=vue-router 教程),刷新页面参数不会丢失。
方式2:params 传参(类似 POST 请求,参数不显示在 URL 中)
// 1. 先修改路由规则,添加参数占位符(src/router/index.js)
const routes = [
{
path: '/about/:id/:name', // 添加占位符 :id 和 :name
name: 'About',
component: AboutView
}
]
// 2. 跳转时传递参数
router.push({
name: 'About', // params 传参必须用 name 跳转,不能用 path
params: {
id: 1,
name: 'vue-router 教程'
}
})
// 3. 接收参数(和 query 接收方式一致)
console.log(route.params.id)
console.log(route.params.name)
特点:参数不显示在 URL 中,更美观,但刷新页面后参数会丢失,适合传递非必要参数[superscript:6]。
3. 404 页面配置(匹配不存在的路由)
当用户访问不存在的 URL 时,需要显示 404 页面,提升用户体验,配置方法如下:
- 在 views 文件夹中,新建 NotFound.vue 组件:
- 在 src/router/index.js 中,添加 404 路由规则(必须放在所有路由的最后):
测试:访问 http://localhost:8080/abc(不存在的路径),会显示 404 页面,点击“返回首页”可跳回首页。
4. 嵌套路由(页面嵌套页面)
开发中经常会遇到“父页面嵌套子页面”的场景(比如首页嵌套“推荐”“热门”子页面),这时候需要用到嵌套路由[superscript:4]。
核心配置:在父路由中添加 children 数组,存放子路由规则,示例如下:
// src/router/index.js
import HomeView from '../views/HomeView.vue'
import Recommend from '../views/Home/Recommend.vue' // 子组件1
import Hot from '../views/Home/Hot.vue' // 子组件2
const routes = [
{
path: '/',
name: 'Home',
component: HomeView,
// 嵌套子路由
children: [
{
path: '', // 子路由默认路径(访问 / 时,默认显示该子组件)
component: Recommend
},
{
path: 'hot', // 子路由路径(访问 /hot 时显示)
component: Hot
}
]
}
]
然后在 HomeView.vue 中,添加子路由出口(router-view),用于渲染子组件:
<template>
<div class="home">
<h1>首页</h1>
<!-- 子路由导航 -->
<nav>
<router-link to="/">推荐</router-link>
<router-link to="/hot" style="margin-left: 20px;">热门</router-link>
</nav>
<!-- 子路由出口:子组件渲染在这里 -->
<router-view></router-view>
</div>
</template>
测试:访问 / 时,显示首页 + 推荐子组件;访问 /hot 时,显示首页 + 热门子组件,实现页面嵌套跳转。
六、小白常见问题(避坑指南)
刚开始使用 vue-router 时,小白容易遇到一些小问题,整理了5个最常见的坑,提前避开,少走弯路:
- 版本不兼容报错:Vue 3 用了 vue-router 3.x 版本,或 Vue 2 用了 vue-router 4.x 版本,会导致项目报错。解决方法:卸载当前版本,重新安装对应版本(Vue 3 装 4.x,Vue 2 装 3.x)[superscript:3]。
- 路由不生效、页面不显示:忘记在 main.js 中挂载路由(app.use(router)),或忘记在 App.vue 中添加 router-view(路由出口)。解决方法:检查 main.js 和 App.vue 的配置,补充缺失的代码[superscript:2]。
- 点击 router-link 不跳转:to 属性的值写错(比如多写 /、少写 /),或路由规则中的 path 写错。解决方法:核对 to 属性和路由规则中的 path,确保一致。
- 参数接收不到:query 传参用 route.params 接收,或 params 传参用 route.query 接收;params 传参用了 path 跳转(params 传参必须用 name 跳转)。解决方法:用对应方式接收参数,params 传参记得用 name 跳转[superscript:6]。
- 404 页面不生效:404 路由规则放在了其他路由前面,导致被前面的路由匹配。解决方法:将 404 路由规则放在所有路由的最后[superscript:3]。
七、Vue 2 + vue-router 3.x 补充(可选)
如果你的项目是 Vue 2,安装和配置方式略有差异,核心区别如下:
- 安装命令:npm install vue-router@3 --save[superscript:3]。
- 路由配置文件(src/router/index.js)写法:
- main.js 挂载路由:
其他用法(跳转、传参、嵌套路由)和 Vue 3 基本一致,只是导入和实例创建方式不同。
八、总结
vue-router 是 Vue 单页应用的“导航核心”,核心逻辑很简单:配置路由规则(URL→组件)→ 挂载路由 → 添加导航和路由出口,就能实现无刷新页面跳转。
对于零基础小白来说,不用深究底层原理,先掌握“安装→配置→基础跳转”这三步,再逐步学习参数传递、404 页面、嵌套路由,就能满足日常开发需求。
本文全程实操,所有代码都能直接复制使用,跟着操作一遍,你就能轻松上手 vue-router。后续多动手练习,熟悉编程式导航、路由守卫等进阶功能,就能灵活应对各种项目场景,成为 Vue 开发的“进阶选手”!