Vue Router 核心知识点梳理

五一假期回来后,复盘Vue Router的时候感觉有点乱乱的,所以索性就把路由模式、嵌套路由、路由跳转、参数获取、懒加载这些核心知识点从头梳理一遍,不然又把它给搞混了,这篇文章用于梳理有关vue router的内容,希望能帮到正在学习vue的你们~

一、首先,先搞懂:Vue Router 到底是干嘛的?

Vue Router 是 Vue 官方路由管理器,核心作用只有一个:

实现单页应用无刷新跳转

URL 改变时,不重新加载整个页面,只替换**<router-view>**里的组件内容,页面切换更流畅。

二、路由核心配置(router/index.ts)

所有路由规则都写在这个文件里,是整个路由的总控制台

1. 基础依赖导入

将需要管理的组件导入,为了等下的规则定义

TypeScript 复制代码
import { createRouter, createWebHistory, createWebHashHistory, type RouteRecordRaw } from 'vue-router'
// 导入页面组件
import HomeView from '../study_tree/xxx/HomeView.vue'

2. 路由规则定义(routes 数组)

路由分三种:一级路由、嵌套(二级)路由、动态路由,话不多说,上代码。

(1)一级路由(基础)

直接匹配路径,替换根目录的<router-view>。

TypeScript 复制代码
{
  path: '/',
  name: 'home',
  component: HomeView,
},
{
  path: '/about',
  name: 'about',
  // 路由懒加载(后面细讲)
  component: () => import('../study_tree/xxx/AboutView.vue'),
}
(2)嵌套路由(二级路由)

children配置,必须依赖父组件的才能渲染<router-view>。

TypeScript 复制代码
{
  path: '/admin',
  name: 'admin',
  component: AdminIndex, // 父组件(必须包含 <router-view>)
  children: [
    { path: '', name: 'adminHome', component: Admin }, // 匹配 /admin
    { path: 'info', name: 'adminInfo', component: Info } // 匹配 /admin/info
  ]
}
(3)动态路由参数

页面需要传 ID 时使用(如文章详情、用户详情)。

TypeScript 复制代码
{
  path: '/article/:id', // :id 是动态参数
  name: 'article',
  component: Article
}

3. 路由实例创建(两种模式必区分)

创建路由时必须选模式。

模式 写法 URL 样式 后端支持 适用场景
History 模式 createWebHistory() /admin、/article/1 需要 正式项目(URL 更美观)
Hash 模式 createWebHashHistory() #/admin、#/article/1 不需要 本地测试/
TypeScript 复制代码
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes
})

export default router

三、最容易混淆:两个核心 API

1.useRouter/useRoute

useRouteruseRoute 长得像,作用完全不同,简单来说

  • useRouter:操作路由(跳转、前进、后退)
  • useRoute:获取当前路由信息(参数、路径、名称)
TypeScript 复制代码
import { useRouter, useRoute } from 'vue-router'

const router = useRouter() // 用来跳转
const route = useRoute()   // 用来拿参数

// 跳转路由
router.push('/about')
// 获取动态参数
console.log(route.params.id)
// 获取查询参数
console.log(route.query)

四、路由跳转的两种方式

1. 声明式跳转

用<router-link>替代<a>标签,去无刷新跳转。

TypeScript 复制代码
<!-- 直接路径跳转 -->
<router-link to="/">首页</router-link>
<!-- 按路由名称 + 传参跳转 -->
<router-link :to="{ name: 'article', params: { id: 10 } }">文章详情</router-link>

2. 编程式跳转

适合按钮点击、逻辑判断后跳转。

TypeScript 复制代码
// 按名称跳转(推荐)
function goRouter1(name:string){
  router.push({name:name}) 
}

// 按路径跳转
function goRouter2(path:string){
  router.push({path:path})
}


// template
<div class="nav">
        <a href="javascript:void 0" @click="goRouter1('home')">home</a>
        <a href="javascript:void 0" @click="goRouter2('/about')">about</a>
</div>

tips:javascript:void 0 的作用是阻止a标签的默认跳转/下载行为,只触发点击事件。

五、路由参数(两种传参方式)

1. 动态路径参数(/article/:id)

  • 配置:路由里写 path: '/article/:id'
  • 获取:route.params.id
  • 场景:文章详情、用户详情

2. 查询参数(/?name=xxx&age=18)

  • 配置:router.push({ path: '/home', query: { name: '张三' } })
  • 获取:route.query.name
  • 场景:列表筛选、分页

六、路由懒加载(性能优化)

为什么要用?

如果所有组件都直接导入,打包后文件体积超大,首次加载慢、白屏时间长。

怎么用?

动态import替代直接导入,路由被访问时才加载对应组件。

TypeScript 复制代码
// 普通导入(打包在一起)
import AboutView from 'xxx'
// 懒加载(拆分打包)
{
  path: '/about',
  name: 'about',
  component: () => import('../study_tree/xxx/AboutView.vue')
}

七、整体逻辑闭环

  • 在index.ts配置路由规则(路径、组件、模式)
  • 用<router-link>或router.push做跳转
  • 用useRoute获取路由参数
  • 用懒加载优化首屏速度
  • 嵌套路由靠父组件的<router-view>渲染

八、小结

Vue Router看似知识点多,其实不看似也是有点多;

核心就围绕配置 → 跳转 → 传参 → 其他 。我感觉就像配置(地图) ---> 跳转(动身去) ---> 传参(带点啥) ---> 其他(需要优化的地方)

当然首要是先把嵌套路由、动态参数、两个 API、两种模式这几个关键点吃透

相关推荐
随风一样自由4 小时前
【前端工程化】前端工程化解耦实践:从问题分析到架构重构
前端·重构·架构
vortex54 小时前
Web 渗透测试:未授权与越权漏洞全流程挖掘思路
前端
我有满天星辰4 小时前
【前端模块化】前端模块化演进之路:从脚本堆砌到标准统一
前端
我有满天星辰4 小时前
Vue 3 响应式双雄:ref 与 reactive 完全指南
前端·javascript·vue.js
随风一样自由12 小时前
【前端独角兽】刚进入前端领域的前端开发用jQuery还是Vue3?
前端·javascript·vue3·jquery
IMPYLH13 小时前
HTML 的 <data> 元素
前端·html
YHHLAI13 小时前
[特殊字符] 面试中的 Promise —— 从入门到精通
前端·javascript·面试
weixin_BYSJ198714 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
沪飘大军14 小时前
ll-llm:一个零依赖、可插拔的 OpenAI 兼容 LLM 代理
javascript
leoZ23115 小时前
Claude 驱动的全栈开发:Spring Boot + Vue 的 BS 架构实践
vue.js·spring boot·架构