当前位置: 首页 > news >正文

简记Vue3(四)—— 路由

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🎨100个小功能 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

文章目录

    • 前言
    • route 路由
    • 路由的 props 配置
    • replace 属性
    • 编程式路由导航
    • 重定向

前言

重拾 Vue3,查缺补漏、巩固基础。

route 路由

路由的配置放在 ./route/index.ts 文件中

import { createRouter, createWebHistory } from "vue-router";import Home from "@/pages/Home.vue";
import About from "@/pages/About.vue";
import News from "@/pages/News.vue";
import Detail from "@/pages/Detail.vue";// 创建路由器
const router = createRouter({history: createWebHistory(), // history 路由模式routes: [{path: "/home",component: Home,},{path: "/About",component: About,},{name: "news",path: "/news",component: News,children: [{name: "detail",path: "detail/:id/:title/:context?",component: Detail,},],},],
});export default router;

要想使用路由,需要在 main.ts 中添加如下配置,把 router 挂在到 App 上

import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";const app = createApp(App);app.use(router);
app.mount("#app");

下面我们创建一套路由规则,点击 首页 / 新闻 / 关于 跳转到相应的页面,基于 新闻 页面,再进行 点击新闻,显示相应的内容,即路由的嵌套

下面是 App.vue 组件的代码

  1. 通过 to 来跳转到指定路由,可以使用 path 或 name(path/,name 不带)
  2. RouterView 是路由内容的显示区域,将来会显示 首页 / 新闻 / 关于 的相关内容
<template><div><h2>路由Test</h2><div><RouterLink to="/home">首页 </RouterLink><RouterLink :to="{ name: 'news' }">新闻 </RouterLink><RouterLink :to="{ path: '/about' }">关于</RouterLink></div><div class="show-area"><RouterView /></div></div>
</template><script lang="ts" setup>
import { RouterView } from "vue-router";
</script><style scoped>
.show-area {margin-top: 20px;height: 200px;border: 1px solid black;
}
</style>

下面是 Home.vue 组件的相关代码

<template><div>主页 | Home</div>
</template><script setup lang="ts"></script>

下面是 About.vue 组件的相关代码

<template><div>关于:这里是前端杂货铺...</div>
</template><script setup lang="ts"></script>

下面是 News.vue 组件的相关代码,使用了四种方法进行传参

使用 params 传参时不能使用 path,只能使用 name;在路由配置中也需要进行占位;参数不能传递对象或数组

<template><div><ul><li v-for="news in newsList" :key="news.id"><!-- 1、使用拼接的方式传递参数 --><!-- <RouterLink:to="`/news/detail?id=${news.id}&title=${news.title}&context=${news.context}`">{{ news.title }}</RouterLink> --><!-- 2、query参数 --><!-- <RouterLink:to="{name: 'detail',query: {id: news.id,title: news.title,context: news.context,},}">{{ news.title }}</RouterLink> --><!-- 3、这种编写方式需要 ./router/index.ts 中做配合(path: "detail/:id/:title/:context?")说明:? 表示可传可不传 --><!-- <RouterLink:to="`/news/detail/${news.id}/${news.title}/${news.context}`">{{ news.title }}</RouterLink> --><!-- 4、params参数 --><RouterLink:to="{name: 'detail',params: {id: news.id,title: news.title,context: news.context,},}">{{ news.title }}</RouterLink></li></ul><div><RouterView /></div></div>
</template><script setup lang="ts">
import { reactive } from "vue";
import { RouterView } from "vue-router";// title 代表新闻标题,context 代表新闻内容
let newsList = reactive([{ id: "1", title: "震惊长安第一拳", context: "是裴擒虎!" },{ id: "2", title: "什么都吃,就是不吃兔子", context: "是老猪!" },{id: "3",title: "收藏了视频,就要对它负责,这是真男人的勋章",context: "是程咬金!",},
]);
</script>

下面是 Detail.vue 组件的相关代码,用于显示新闻的内容

<template><ul><!-- <li>{{ query.id }}</li><li>{{ query.title }}</li><li>{{ query.context }}</li> --><li>{{ params.id }}</li><li>{{ params.title }}</li><li>{{ params.context }}</li></ul>
</template><script setup lang="ts">
import { toRefs } from "vue";
import { useRoute } from "vue-router";
const route = useRoute();// query 传参的接收方式
// const { query } = toRefs(route);// params 传参的接收方式
const { params } = toRefs(route);
</script>

以下是相关显示效果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


路由的 props 配置

作用是为了让路由组件更方便的收到参数(可以将路由参数作为 props 传给组件)

修改 ./router/index.ts 组件的 news 路由相关代码

    {name: "news",path: "/news",component: News,children: [{name: "detail",// path: "detail/:id/:title/:context?", // 使用 params 传参时配置path: "detail",component: Detail,// 将路由收到的所有 params 参数作为 props 传给路由组件//   props: true,// 自己决定将什么作为 props 给路由组件props(route) {return route.query;},},],},

修改 Detail.vue 组件的相关代码

<template><ul><!-- <li>{{ query.id }}</li><li>{{ query.title }}</li><li>{{ query.context }}</li> --><!-- <li>{{ params.id }}</li><li>{{ params.title }}</li><li>{{ params.context }}</li> --><li>{{ id }}</li><li>{{ title }}</li><li>{{ context }}</li></ul>
</template><script setup lang="ts">
import { toRefs } from "vue";
import { useRoute } from "vue-router";
const route = useRoute();// query 传参的接收方式
// const { query } = toRefs(route);// params 传参的接收方式
// const { params } = toRefs(route);defineProps(["id", "title", "context"]);
</script>

replace 属性

replace 用于控制路由跳转时操作浏览器历史记录的模式

  • push模式:追加历史记录(默认)
  • replace模式:替换当前记录

写法很简单,直接在 RouterLink 标签中添加 replace 即可

<RouterLink replace ...>xxx</RouterLink>

编程式路由导航

除了使用 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现

接下来,我们修改 Detail.vue 组件的相关代码,实现通过点击按钮的方式实现路由的跳转

<template><div><ul><li v-for="news in newsList" :key="news.id"><button @click="showNewsDetails(news)">查看新闻详情</button><!-- params参数 --><RouterLink:to="{name: 'detail',params: {id: news.id,title: news.title,context: news.context,},}">{{ news.title }}</RouterLink></li></ul><div><RouterView /></div></div>
</template><script setup lang="ts">
import { reactive } from "vue";
import { useRouter, RouterView } from "vue-router";// title 代表新闻标题,context 代表新闻内容
let newsList = reactive([{ id: "1", title: "震惊长安第一拳", context: "是裴擒虎!" },{ id: "2", title: "什么都吃,就是不吃兔子", context: "是老猪!" },{id: "3",title: "收藏了视频,就要对它负责,这是真男人的勋章",context: "是程咬金!",},
]);const router = new useRouter();interface NewsInter {id: string;title: string;context: string;
}function showNewsDetails(news: NewsInter) {router.push({name: "detail",params: {id: news.id,title: news.title,context: news.context,},});
}
</script>

在这里插入图片描述


重定向

当网站打开时,默认指定一个路由地址。如下, 项目启动打开时,默认重定向到 /home 路由

    {path: "/",redirect: "/home",},

在这里插入图片描述


参考资料:
https://www.bilibili.com/video/BV1Za4y1r7KE?spm_id_from=333.788.videopod.episodes&vd_source=f839085517d2b7548b2939bfe214d466&p=42

在这里插入图片描述


相关文章:

简记Vue3(四)—— 路由

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

Python批量合并多个PDF

在日常工作中&#xff0c;处理和合并多个 PDF 文件是一个常见需求&#xff0c;尤其是在需要将大量文件整理成一个完整文档时。本文将详细介绍如何使用 Python 的 PyMuPDF 库来实现批量 PDF 文件合并&#xff0c;并提供针对大文件优化的解决方案。 安装 PyMuPDF 要使用 PyMuPD…...

Linux:vim命令总结及环境配置

文章目录 前言一、vim的基本概念二、vim模式命令解析1. 命令模式1&#xff09;命令模式到其他模式的转换&#xff1a;2&#xff09;光标定位&#xff1a;3&#xff09;其他命令&#xff1a; 2. 插入模式3. 底行模式4. 替换模式5. 视图模式6. 外部命令 三、vim环境的配置1. 环境…...

贪心算法day05(k次取反后最大数组和 田径赛马)

目录 1.k次取反后最大化的数组和 2.按身高排序 3.优势洗牌 1.k次取反后最大化的数组和 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 代码&#xff1a; class Solution {public int largestSumAfterKNegations(int[] nums, int k) {//如…...

默认 iOS 设置使已锁定的 iPhone 容易受到攻击

苹果威胁研究的八个要点 苹果手机间谍软件问题日益严重 了解 Apple 苹果的设备和服务器基础模型发布 尽管人们普遍认为锁定的 iPhone 是安全的&#xff0c;但 iOS 中的默认设置可能会让用户面临严重的隐私和安全风险。 安全研究员 Lambros 通过Pen Test Partners透露&#…...

上海市计算机学会竞赛平台2024年11月月赛丙组

题目描述 在一个棋盘上&#xff0c;有两颗棋子&#xff0c;一颗棋子在第 aa 行第 bb 列&#xff0c;另一个颗棋子在第 xx 行第 yy 列。 每一步&#xff0c;可以选择一个棋子沿行方向移动一个单位&#xff0c;或沿列方向移动一个单位&#xff0c;或同时沿行方向及列方向各移动…...

Python批量设置图片背景为透明

我们日常生活中制作PPT等教学资源时&#xff0c;需要批量去除图片背景&#xff0c;就可以使用 Python 的 rembg 库。 这个库基于神经网络模型&#xff0c;去背景效果较好&#xff0c;可以批量处理png, jpg, jpeg等图片。采用以下代码可以批量处理当前目录下的所有图片&#xf…...

Vue CLI 脚手架

cli脚手架创建项目步骤 全局安装(一次)&#xff1a;yarn global add vue/cli 无法识别yarn的要先安装yarn&#xff1b;终端执行npm install -g yarn 查看Vue版本&#xff1a;vue --version 这里有问题&#xff08;success上方有warning) 报错&#xff1a;‘vue’不是内部或外部…...

Linux【基础篇】

-- 原生罪 linux的入门安装学习 什么是操作系统&#xff1f; 用户通过操作系统和计算机硬件联系使用。桥梁~ 什么是Linux&#xff1f; 他是一套开放源代码&#xff08;在互联网上找到Linux系统的源代码&#xff0c;C语言写出的软件&#xff09;&#xff0c;可以自由 传播&…...

多线程环境下安全地使用 SimpleDateFormat的常见方法

文章目录 1. 使用局部变量&#xff08;每个线程独立一个实例&#xff09;2. 使用 ThreadLocal<SimpleDateFormat>3. 使用 DateTimeFormatter&#xff08;Java 8 及以上&#xff09;4. 使用 DateFormat 子类&#xff08;如 FastDateFormat&#xff09;5. 使用 synchronize…...

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头 原版表头和表体字体美化自动拼接错误提示列自适应宽度自动合并单元格使用Easyexcel使用poi导出 在后台管理开发的工作中,离不开的就是导出excel了. 如果是简单的导出, 直接easyexce…...

ANDROIDWORLD: A Dynamic Benchmarking Environment for Autonomous Agents论文学习

这个任务是基于androidenv的。这个环境之前学过&#xff0c;是一个用来进行强化学习的线上环境。而这篇文章的工作就是要给一些任务加上中间的奖励信号。这种训练环境的优点就是动态&#xff0c;与静态的数据集&#xff08;比如说我自己的工作&#xff09;不同&#xff0c;因此…...

Docker 常用命令详解(详细版)

Docker 是一个开源的容器化平台&#xff0c;它使得开发人员可以打包应用程序及其所有依赖项&#xff0c;并在任何环境中运行。Docker 提供了简单而强大的命令行工具来管理容器、镜像、网络等。本文将详细介绍 Docker 的常用命令及其使用方法。 1. 安装 Docker 在使用 Docker …...

【网络安全 | 甲方安全建设】分布式系统、Redis分布式锁及Redisson看门狗机制

未经许可,不得转载。 文章目录 分布式系统分布式系统的核心特性分布式系统的典型架构分布式锁概念Redis 分布式锁原理互斥性锁释放锁的唯一性具体实现Redisson分布式锁分布式系统 分布式系统是一种由多台计算机(节点)组成的系统,这些节点通过网络相互连接并协同工作,共同…...

「QT」几何数据类 之 QLineF 浮点型直线类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...

Treeland 技术揭秘,如何使得 DDE 纵享丝滑?

近日&#xff0c;deepin&#xff08;深度&#xff09;社区亮相COSCon24 第九届中国开源年会开源市集&#xff0c;且社区资深桌面研发工程师张丁元为大家来了《Treeland&#xff0c;DDE进步的阶梯》技术分享。 就着这个机会&#xff0c;今天就让我们一起来聊聊如何在追求华丽动…...

快速了解SpringBoot 统一功能处理

拦截器 什么是拦截器&#xff1a; 拦截器是Spring框架提供的重要功能之一&#xff0c;主要进行拦截用户请求&#xff0c;在指定方法前后&#xff0c;根据业务需求&#xff0c;执行预先设定的代码。 也就是说,允许开发⼈员提前预定义⼀些逻辑,在⽤⼾的请求响应前后执⾏.也可以…...

C++区分数组的引用和引用的数组

void f(int (&arr)[10]) {//正确} void f1(int &arr[10]) {//不允许使用引用的数组} []&#xff08;数组下标运算符&#xff09;的优先级高于&&#xff08;取地址运算符&#xff09;。所有表达式&arr[i]等价于&(arr[i]) 引用的数组 一个包含引用的数组&…...

【harbor】离线安装2.9.0-arm64架构服务制作和升级部署

harbor官网地址&#xff1a;Harbor 参考文档可以看这里&#xff1a;部署 harbor 2.10.1 arm64 - 简书。 前提环境准备&#xff1a; 安装docker 和 docker-compose 先拉arm64架构的harbor相关镜像 docker pull --platformlinux/arm64 ghcr.io/octohelm/harbor/harbor-regist…...

ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决

前言 在现代前端开发中&#xff0c;代码质量与代码风格的统一是两个非常重要的方面。良好的代码质量能减少 bug 的产生&#xff0c;而统一的代码风格则能提高团队协作的效率。为了实现这两个目标&#xff0c;我们通常会使用一些工具。 为了保证代码的可读性和维护性&#xff0…...

uniApp之uni-file-picker使用踩坑

标题党~也不算坑吧 就是初体验 上传是需要存储一下子的&#xff0c;我以为uniApp是自己免费开的服务给大家中转使用&#xff0c;就没管这个事&#xff0c;但是官网是这么说的&#xff1a; 就我是怎么发现的&#xff0c;使用了一段时间后&#xff0c;上传的图片都裂了&#xff…...

【C语言】。末尼

用js写一个冒泡排序 当然可以。在JavaScript中&#xff0c;你可以使用递归的方式来实现冒泡排序算法。这是一个简单的示例&#xff1a; function bubbleSort(arr) { let len arr.length; if(len < 1){ return arr; // 如果数组只有一个元素或为空&#xf…...

【鉴权】深入解析 Token:身份认证的核心技术

目录 引言一、Token 的定义与概念1.1 Token 是什么&#xff1f;1.2 无状态性与自包含性1.3 Token 的工作流程1.3.1 基本工作流程1.3.2 工作流程图示 二、Token 的常见用途2.1 用户身份验证2.2 授权控制2.3 防止跨站请求伪造&#xff08;CSRF&#xff09;2.4 跨域认证 三、Token…...

FastReport将停止 .NET Framework 上的 WebReport 更新

从2024/ 12 /1 日起&#xff0c;Fastreport将停止发布更新和提供对 FastReport.Web (.NET Framework) 的技术支持。该库一直是使用 Online Designer 的许多项目中报告的核心。这些更改意味着 FastReport.Web (Legacy) 库&#xff08;FastReport.Net包的一部分&#xff09;将不再…...

面试:TCP、UDP如何解决丢包问题

文章目录 一、TCP丢包原因、解决办法1.1 TCP为什么会丢包1.2 TCP传输协议如何解决丢包问题1.3 其他丢包情况&#xff08;拓展&#xff09;1.4 补充1.4.1 TCP端口号1.4.2 多个TCP请求的逻辑1.4.3 处理大量TCP连接请求的方法1.4.4 总结 二、UDP丢包2.1 UDP协议2.1.1 UDP简介2.1.2…...

在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码

在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码 在Ubuntu下安装RabbitMQ可以按照以下步骤进行&#xff1a;步骤 1: 更新系统步骤 2: 安装Erlang步骤 3: 添加RabbitMQ仓库步骤 4: 更新APT索引并安装RabbitMQ步骤 5: 启动RabbitMQ服务步骤 6: 检查RabbitMQ状态步骤 7: …...

HTTPS通信和TCP通信有什么不一样

HTTPS通信和TCP通信的主要区别如下&#xff1a; ‌协议层次‌&#xff1a;HTTPS是应用层协议&#xff0c;建立在HTTP协议之上&#xff0c;并增加了SSL/TLS加密层&#xff1b;而TCP是传输层协议&#xff0c;提供可靠的数据传输服务。‌安全性‌&#xff1a;HTTPS通过SSL/TLS加密…...

Kafka 的一些问题,夺命15连问

kafka-中的组成员 kafka四大核心 生产者API 允许应用程序发布记录流至一个或者多个kafka的主题&#xff08;topics&#xff09;。 消费者API 允许应用程序订阅一个或者多个主题&#xff0c;并处理这些主题接收到的记录流 StreamsAPI 允许应用程序充当流处理器&#xff08;s…...

unity3d————延时函数

1.public void InvokeRepeating(string methodName, float time, float repeatRate); 延迟重复执行函数 InvokeRepeating 参数一&#xff1a;函数名字符串 参数二&#xff1a;第一次执行的延迟时间 参数三&#xff1a;之后每次执行的间隔时间 注意&#xff1a; 1-1.延时函数第…...

计算机学生自我提升方法——善用搜索引擎

计算机学生自我提升方法——善用搜索引擎 在信息爆炸的时代&#xff0c;计算机专业的学生如何有效地自我提升&#xff1f;答案可能就藏在一个简单却强大的工具——搜索引擎中。搜索引擎不仅是获取知识的入口&#xff0c;更是解决问题的利器。下面&#xff0c;我将分享一些善用…...

用wordpress做的网站有哪些/百度账号快速注册

python爬虫可以用来做什么&#xff1f;1、收集数据python爬虫程序可用于收集数据。这也是最直接和最常用的方法。由于爬虫程序是一个程序&#xff0c;程序运行得非常快&#xff0c;不会因为重复的事情而感到疲倦&#xff0c;因此使用爬虫程序获取大量数据变得非常简单和快速。由…...

衡水网站开发/网络营销的几种模式

文章目录1. 按2. 元素表示说明3. 举例3.1. 简单例子3.2. 复杂例子3.3. 复杂项目的拆分表示法1. 按 E-R图提供了表示实体型、属性和联系的方法。注意&#xff1a;由于E-R图的图形元素并没有标准化&#xff0c;不同教材和不同的构建E-R图的工具软件都会有一些差异。 2. 元素表示…...

岳阳政府网站建设公司/百度网页版入口

泛型 泛型是 TypeScript 非常重要和有趣的特性,它允许在定义函数、类或接口时使用类型参数,从而使这些定义可以适用于多种类型。通过使用泛型,我们可以编写更加通用和灵活的代码。 我们可以使用尖括号 <T> 来表示一个类型参数: function identity<T>(arg: T…...

南京网站制作有限公司/整站多关键词优化

中间件(需要使用express) 本质上是一个函数&#xff0c;包含三个参数 request、 response 、next 作用 执行任何代码修改请求和响应对象终结请求-响应循环&#xff08;让一次请求得到响应&#xff09;调用堆栈中的下一个中间件或者路由 分类 应用级中间件(全局)&#xff0…...

东平网站制作哪家好/求网址

矩形嵌套 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述有n个矩形&#xff0c;每个矩形可以用a,b来描述&#xff0c;表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d&#xff08;相当于旋转X90度&…...

营销网站做推广公司/搜狗推广管家

安装 一. Apache 安装 yum install -y httpd启动 /etc/init.d/httpd start备注&#xff1a;Apache启动之后会提示错误&#xff1a; 正在启动httpd:httpd: Could not reliably determine the server’s fully qualif domain name, using ::1 for ServerName解决办法&#xff1a;…...