Vue-Router 基础使用

article/2025/8/22 10:32:57

Vue Router 是 Vue 官方的客户端路由解决方案。

客户端路由的作用是在单页应用 SPA 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时,URL 会随之更新,但页面不需要从服务器重新加载。

Vue Router 基于 Vue 的组件系统构建,你可以通过配置路由来告诉 Vue Router 为每个 URL 路径显示哪些组件。

1. 基础入门原理与示例

1.1. 初识Vue-Router

Vue-Router 是 Vue.js 官方的路由管理器,它能够创建单页应用 SPA,通过在应用中创建不同的视图和路径。

1.2. 安装与配置

使用npm安装: npm install vue-router

配置Vue-Router:

import Vue from 'vue';
import Home from './views/Home.vue';
import About from './views/About.vue';Vue.use(router);const routes = [{ path: '/', component: Home },{ path: '/about', component: About }
];const router = new VueRouter({routes
});new Vue({router,render: h => h(App)
}).$mount('#app');

1.3. 基本示例

创建两个简单的组件并设置路由。

在Vue实例中使用 <router-view> 来显示路由对应的组件。

<div id="app"><router-link to="/">Home</router-link><router-link to="/about">About</router-link><router-view></router-view>
</div>

我们还可以在组件中通过访问实例,使用方法进行路由跳转。

export default {methods: {goToAbout() {this.$router.push('/about')},},
}

如果是 Composition API,则可以使用如下方法。

<script setup>
import { computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'const router = useRouter()
const route = useRoute()const search = computed({get() {return route.query.search},set(search) {router.replace({ query: { search } })}
});
</script>

2. 动态路由

很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数:

import User from './User.vue'
// 这些都会传递给 `createRouter`
const routes = [// 动态字段以冒号开始{ path: '/users/:id', component: User },
]

现在像 /users/1 和 /users/2 这样的 URL 都会映射到同一个路由。

路径参数用冒号:表示。当一个路由被匹配时,它的 params 的值将在每个组件中以 route.params 的形式暴露出来。因此,我们可以通过更新 User 的模板来呈现当前的用户 ID。

<template><div><!-- 当前路由可以通过 $route 在模板中访问 -->User {{ $route.params.id }} </div>
</template>

2.1. 获取路由参数

获取路由参数的方式有几种,通常我们分为模板中获取和 JavaScript 逻辑中获取,分别为:

1. 在模板中消费参数

const User = {template: '<div>User {{ $route.params.id }}</div>'
};

2. 在 JavaScript 中使用参数

<script setup>import { watch } from 'vue'import { useRoute } from 'vue-router'const route = useRoute()watch(() => route.params.id, (newId, oldId) => {// 对路由变化做出响应...}
</script>

2.2. 捕获所有路由或404 Not found 路由

常规参数只匹配 url 片段之间的字符,用 / 分隔。如果我们想匹配任意路径,我们可以使用自定义的 路径参数 正则表达式,在 路径参数 后面的括号中加入 正则表达式:

const routes = [// 将匹配所有内容并将其放在 `route.params.pathMatch` 下{ path: '/:pathMatch(.*)*', name: 'NotFound', component: NotFound },// 将匹配以 `/user-` 开头的所有内容,并将其放在 `route.params.afterUser` 下{ path: '/user-:afterUser(.*)', component: UserGeneric },
]

3. 路由嵌套

一些应用程序的 UI 由多层嵌套的组件组成。在这种情况下,URL 的片段通常对应于特定的嵌套组件结构,例如:

3.1. 配置嵌套路由

配置子路由如下:

const routes = [{ path: '/user/:id', component: User,children: [{path: 'profile',component: UserProfile},{path: 'posts',component: UserPosts}]}
];

3.2. 使用嵌套路由组件

在父组件中使用 <router-view> 来显示子路由组件。

<div><h2>User {{ $route.params.id }}</h2><router-link to="profile">Profile</router-link><router-link to="posts">Posts</router-link><router-view></router-view>
</div>

3.3. 嵌套路由命名

嵌套路由可以进行命名,方便在后续使用中管理。

const routes = [{path: '/user/:id',component: User,// 请注意,只有子路由具有名称children: [{ path: '', name: 'user', component: UserHome }],},
]

4. 路由跳转

路由的跳转方式有很多种,总结如下:

RouterLink:

<RouterLink to="/about">Go to About</RouterLink>

实例方法跳转:

export default {methods: {goToAbout() {this.$router.push('/about')},},
}

Composition API:

<script setup>import { computed } from 'vue'import { useRoute, useRouter } from 'vue-router'const router = useRouter()router.push('/about')// 命名的路由,并加上参数,让路由建立 urlrouter.push({ name: 'user', params: { username: 'eduardo' } })router.go(1)
</script>

http://www.hkcw.cn/article/GMuWlcbuiQ.shtml

相关文章

Linux服务器时间同步——Chronyd

需求&#xff1a;现有三台服务器&#xff0c;想要确保服务器间时间保持一致。 一、安装Chronyd 确认是否安装了chronyd服务 systemctl status chronyd 如果Linux系统中没有安装&#xff0c;可以通过如下命令进行安装&#xff1a; yum install chrony -y 注&#xff1a;确保…

手机实名认证接口如何用C#进行调用?

一、什么是手机实名认证接口&#xff1f; 通过输入用户的姓名与手机号码&#xff0c;或手机号与身份证号码&#xff0c;验证三者之间的匹配关系&#xff0c;从而判断该手机号是否属于指定用户本人。 二、为什么需要运营商二要素验证&#xff1f;传统方式有哪些局限&#xff1…

springboot多模块父pom打包正常,单模块报错

背景&#xff1a;因为项目开发中经常发测试环境&#xff0c;发现使用阿里的插件能一键上传&#xff0c;不用手动上传比较方便。但是多模块有多个启动jar的时候&#xff0c;全局打包太慢&#xff0c;单独打发现报错。这里贴一下我使用这个插件的方式&#xff1a; 附带一个我感觉…

硬件同步机制-Swap指令实现互斥的基本讲解

Swap 指令 Swap指令能原子地交换两个变量的值 &#xff0c;即这一操作不可分割、不会被中断。其代码逻辑为&#xff1a; boolean temp *a; &#xff1a;创建一个临时变量temp &#xff0c;将变量a的值暂存到temp中 。*a *b; &#xff1a;把变量b的值赋给变量a 。*b temp; &…

中国国运新引擎:下一代液晶技术突破如何重塑全球显示格局

一、国运崛起&#xff1a;中国在未来关键领域的集体突破 在全球科技竞争白热化的当下&#xff0c;中国正迎来关键领域的集中爆发。从新能源汽车到 5G 通信&#xff0c;从量子计算到航天工程&#xff0c;中国不仅打破了西方的技术封锁&#xff0c;更在多个战略领域实现了从 “跟…

在雄性小鼠自发脑网络中定位记忆巩固的因果中枢

目录 简要总结 摘要 1 引言 2 方法 3 结果 简要总结 这篇文章主要研究了雄性小鼠在自发脑网络中记忆巩固的因果中枢定位。记忆巩固涉及学习后休息和睡眠期间全脑网络的自发重组&#xff0c;但具体机制尚不清楚。目前理论认为海马体在这一过程中至关重要&#xff0c;但其他…

美国威胁退出俄乌冲突调解

△联合国安理会(资料图)当地时间5月29日,美国告知联合国安理会,如果俄罗斯决定继续在乌克兰进行军事行动,美国将不得不考虑退出旨在结束冲突的谈判努力。美国表示,目前提出的协议是对俄罗斯最好的结果,俄罗斯总统普京应该接受。此外,对俄罗斯的额外制裁仍在讨论中。美国…

flutter项目迁移空安全

重中之重 备份好项目文件&#xff0c;甚至连已经加载好的flutter库也可以备份。环境包升级 2.1 不要直接换成flutter:3.0以上的版本&#xff0c;这样做既有基本的库兼容问题&#xff0c;又有空安全下的语法问题(整个项目中需要增加 late、?、!的语法错误&#xff0c;一片报错的…

单亲妈妈抗癌6年去世 生命旅程的坚韧与无奈

单亲妈妈抗癌6年去世 生命旅程的坚韧与无奈!5月28日晚,浙江的单亲妈妈张潇群因结肠癌去世,年仅37岁。她在网络上是一位知名的抗癌博主,无数人关注着她的抗癌历程,从确诊到治疗的过程充满艰辛。浏览她的社交媒体,仿佛走进了一场关于疼痛的独白,无论是病痛的呻吟还是求生的…

深入理解C#泛型:提升代码复用与类型安全的利器

在现代软件开发中&#xff0c;编写灵活、可重用且类型安全的代码是每个开发者的追求。C#作为一种强类型语言&#xff0c;通过引入泛型(Generics)特性&#xff0c;完美地解决了代码重用与类型安全之间的矛盾。本文将全面探讨C#泛型的核心概念、实现原理、高级特性以及最佳实践&a…

Deepseek升级 低调发布性能提升

5月28日晚,DeepSeek在官方交流群中宣布R1模型已完成小版本试升级。今年3月,DeepSeek对V3模型进行小版本升级时也采用了同样的方式,先通过官方交流群宣布,随后才公布具体更新内容。本次试升级,DeepSeek依旧保持低调,没有发布详细的技术说明文档或举行发布活动。然而,据用…

AET3156AP电源方案 禾纳代理商

特性VDs-30V,ID-28ARDS(ON)13.5mOM(TYR.)VGS-10V&#xff0c;Ib-6ARDS(ON)18mOM(TYR.)VGS-4.5V&#xff0c;IB-5A可靠且坚固雪

学生管理系统V2.0

学生管理系统V2.0 需求: 要求实现一个基于指针的学生成绩管理系统&#xff0c;具体功能如下: 添加学生信息&#xff1a;输入学号和三门成绩&#xff0c;存储到数组中。显示所有学生信息&#xff1a;遍历数组&#xff0c;输出每个学生的学号和成绩。计算每个学生的平均分和总分&…

从汇编的角度揭秘C++函数重载,原来这么简单

函数重载是指在同一个作用域内&#xff0c;有多个同名函数&#xff0c;但是它们的形参列表不同。在调用时&#xff0c;根据不同的实参&#xff0c;调用相应的函数。函数重载是一种静态多态形式。我们先来看一个函数重载的例子&#xff0c;然后分析其背后的原理。请看下面这段代…

Sigma-Aldrich胰蛋白酶细胞解离方案速览

Sigma-Aldrich_胰蛋白酶用于细胞培养 细胞解离是细胞传代过程中的一个步骤&#xff0c;即细胞从预处理表面分离&#xff0c;形成悬浮液。这些悬浮液对于传代培养重新接种、细胞计数分析和细胞增殖非常重要。有多种蛋白水解酶可用来从粘附基质上脱离细胞&#xff0c;胰蛋白酶就…

金正恩:炮兵部队随时能战且战之必胜!

金正恩:炮兵部队随时能战且战之必胜!据朝中社报道,朝鲜人民军大联合部队炮兵部队于29日进行了火炮射击比赛,朝鲜劳动党总书记、国务委员长金正恩亲临现场观摩。金正恩对比赛成果予以高度评价,他指出,参赛炮兵部队充分展现了炮兵武装力量的实战能力,时刻保持着万全的临战…

保健品,为何总在“围猎”老年人?

近日,市场监管总局在全国部署开展老年人药品、保健品虚假宣传专项整治工作,打击药品、保健品市场“坑老”“骗老”行为。各地市场监管部门将聚焦老年人药品、保健品领域,依法查处虚假宣传、价格欺诈、违法广告、非法添加等侵害老年人合法权益、破坏市场竞争秩序的行为。同时…

立志成为一名优秀测试开发工程师(第八天)——jemeter的学习

jemeter的学习 目录 一、jemeter常见元件的认识 二、jemeter手动设计脚本 三、jemeter工具录制脚本 一、jemeter常见元件的认识 ①测试计划&#xff1a;所有元件的父级文件&#xff08;容器&#xff09;&#xff0c;在所有元件的最顶层 其他元件都是基于测试计划来组织的…

如何使删除的数据不可恢复?

一些无用的数据包含我们计算机上的重要信息。如果你想让这些数据彻底不可恢复&#xff0c;你需要了解必要的数据擦除方法和一些有用的技巧。继续阅读并轻松获得解决方案。 第 1 部分&#xff1a;我可以使已删除的数据不可恢复吗&#xff1f; 是的&#xff0c;完全有可能使已删…

35岁小伙不结婚 爆改山洞隐居4年:美色不值得浪费时间金钱!

35岁小伙不结婚爆改山洞隐居4年。近日,一35岁小伙爆改山洞隐居4年引发网友热议,采访中他表示美色不值得自己浪费时间金钱,成本太高了。叫世外桃源也不为过,山洞门前有小河,门口可以种菜,而山洞用红砖建造,也非常现代化,有电脑和家具一应俱全的,书房是自己空间!建造一…