vue3 路由写法及传参方式 !超详细

    Vue Router 是 Vue.js 官方的路由管理器。它主要用于单页面应用程序(SPA, Single Page Application)中,帮助解决页面导航、组件复用等问题。

基本的使用

1.router配置文件代码

创建一个ts文件,用来写路由器


// 创建一个路由器,并暴露出去
// 引入路由配置文件
import { createRouter, createWebHashHistory,createWebHistory } from 'vue-router'
// 引入可能呈现的组件
import person from '@/components/person.vue'
import button from '@/view或pages/button.vue'
import detail from '@/view或pages/detail.vue'
// 创建路由器
const router = createRouter({// 必须要写,路由的工作模式  history/Hash// history: createWebHashHistory(),history: createWebHistory(),// 路由规则routes: [/*  路由规则格式如下:其中path 和 component是必填项, 其他选填{path: '/路径',component: aComponent,  对应的组件,后面展示不同的写法name: 'name',...其他配置},*/{path: '/person',component: person},{path: '/table',component: () => import('@/view或pages/table.vue')},{path: '/button',component: button},{path: '/news',name: 'news',component: () => import('@/view或pages/news.vue'),children: [{path: 'detail',component: detail}]},]
})export default router

路由模式:  通常用history的更多

history:  url不带#,但是需要服务端配合处理路径问题 

hash:   url带# 不需要服务器处理路径问题,但是SEO优化方面较差

嵌套路由

有的时候我们路由展示了一个组件,但是这个组件里面还有别的路由组件,这时候需要使用嵌套路由


//       如果有子路由(嵌套路由),写在children里面
//       其写法跟正常的路由是一样的,但子路由的路径,不用加一开始的/
//       这个路由最终路径为 /news/testDetail
{path: '/news',name: 'xinwen',component: () => import('@/view或pages/news.vue'),children: [{name: 'testDetail',path: 'detail/:id/:title/:content',component: detail},/*  其他子路由 {}*/]
},

路由重定向

将特定的路径,重新定向到已有路由,通常是用于默认展示某某内容使用的

下面的代码意思是,当路径为 / 的时候, 将会重定向访问到 /demo

{path:'/',redirect:'/demo'
}

2.使用router

main.ts中,我们需要使用router

import router from './router/index'const app =createApp(App)app.use(router)
app.mount('#app')

在需要使用router的页面,使用RouterLink和RouterView来显示对应的vue页面

<template><div class="app"><h2 class="title">Vue路由测试</h2><!-- 导航区 --><div class="navigate"><RouterLink to="/table" active-class="active">表格</RouterLink><RouterLink to="/button" active-class="active">按钮</RouterLink><RouterLink to="/news" active-class="active">新闻</RouterLink></div><!-- 展示区 --><div class="main-content"><RouterView></RouterView></div></div>
</template><script lang="ts" setup name="App">import {RouterLink,RouterView} from 'vue-router'  
</script>

    RouterLink 是用于定义导航链接的,它类似于 HTML 中的 <a> 标签。点击RouterLink 时,Vue Router 会动态更新视图,而不会重新加载整个页面。值得注意的是,RouterLink标签需要有一个to属性,也就是点击它后,给路由器的一个标识 (如何找到对应组件)

    RouterView用于显示当前路由对应的组件,也就是把渲染出来的组件,放在对应页面的哪一个位置上。

to的写法

<!-- 第一种:to的字符串写法 直接写路径的字符串 -->
<router-link active-class="active" to="/home">主页</router-link><!-- 第二种:to的对象写法 -->
<router-link active-class="active" :to="{path:'/home',// 其他配置等 ......}"
>
Home
</router-link><router-link active-class="active" :to="{name:'detail',// 其他配置等 ......}"
>
Detail
</router-link>

通常还是对象写法用的更多一点,因为功能性更强 (可以使用name来路由, 传参等等)

Replace属性

replace属性能够设置在路由跳转时,浏览器操作历史记录的模式 (push/replace)

push: 历史记录入栈

push是默认的模式,支持浏览器的返回和前进。每次导航都会向浏览器的历史栈添加一个新的记录。

replace:历史记录直接替换

新的路由会替换当前的历史记录条目,而不是添加一个新的。这样做的结果是,如果用户点击了后退按钮,他们将不会回到刚刚从该页面导航之前的位置,而是跳转到更早的一个历史记录条目。

默认是push,如果想要开启replace,只需要标签上加上这个属性

<RouterLink replace .......>News</RouterLink>

路由传参

    传递和接收参数的关键是 route 对象。route 对象包含了当前路由的所有信息,包括路径、参数、查询字符串等。为了在组件中访问这些信息,Vue Router 提供了 useRoute 钩子。我们后续传参会经常用到它

1.Query参数

    众所周知,query参数就是在路径后拼上键值对,如 /路径?id=1&name=Eve&age=18 因此我们可以直接在路径上拼,或者是在to的对象中,用query来声明

发送

<!-- 跳转并携带query参数(to的字符串写法) -->
<router-link to="/person/detail?id=1&name=Eve&age=18">跳转
</router-link><!-- 跳转并携带query参数(to的对象写法) -->
<RouterLink :to="{//name:'ren', //用name也可以跳转path:'/person/detail',query:{id:1,name: 'Eve',age: 18}}"
>显示人
</RouterLink>

接收

我们通过useRoute()来获取到当前组件的路由信息,接着把query取出来就行了

import {useRoute} from 'vue-router'
const route = useRoute()
// 打印query参数
const a = route.query
console.log(route.query.name); // Eve
console.log(route.query.age);  // 18

2.Params参数

    我主要是学后端的,我感觉这个params参数就跟请求里面的那个PathVariable有一些相似之处,都是通过路径来传参的

路由的配置

注意点1:params参数需要在路由规则中占位; 注意点2:to中只能用name来进行路由跳转,path不行

我这里主要是想传到testDetail里面, 可以看到我打算传三个,id,title,content,

传什么,就写    /:参数名

{path: '/news',name: 'xinwen',component: () => import('@/view或pages/news.vue'),children: [{name: 'testDetail',path: 'detail/:id/:title/:content',component: detail}]},

发送

注意:参数必须按照路由中的顺序传 且不能少传

<!-- 直接拼到路径中,会按照占位去赋值 -->
<RouterLink :to="`/news/detail/001/新闻001/内容001`">{{newsItem.title}}</RouterLink><RouterLink :to="{name:'testDetail', //用name跳转,不能用pathparams:{id:newItem.id,title:newItem.title,content:newItem.content}
}">
{{ newItem.title }}
</RouterLink>

少传会报错,导致功能无法使用

接收

与query非常相似,只不过是取的params

import { useRoute } from 'vue-router'
let route = useRoute()
console.log(route.params);

3.Props参数

路由的props配置

如果想要传props参数,需要在路由规则里面配置,它并不是单纯的在RouterLink上面写的,而是需要RouterLink上传入params参数

{name:'xiang',path:'detail/:id/:title/:content',component:Detail,// props的对象写法,作用:把对象中的每一组key-value作为props传给Detail组件// 但是数据就是写死的了,因此用的很少// props:{a:1,b:2,c:3}, // props的布尔值写法,作用:把收到了每一组"params"参数,作为props传给Detail组件// 如果写了true,那么正常按照params参数写就行,但是接收的地方可以通过defineProps来接// props:true// props的函数写法,作用:把返回的对象中每一组key-value作为props传给Detail组件props(route){//  return route.query  想传别的回去也行,但我们直接传params回去return route.params}
}

接收

接收就是正常的props参数接收的方法 defineProps

<script lang="ts" setup namespace="Detail">
import { ref,toRefs} from 'vue'
import { useRoute } from 'vue-router'
let route = useRoute()
const props=defineProps({id: String,title: String,content: String
})
const {id,title,content}=toRefs(props)
</script>

编程式导航

    路由的编程式导航是指通过 JavaScript 代码来控制页面的导航,而不是通过 <RouterLink> 组件。编程式导航提供了更大的灵活性,可以在特定条件下触发导航操作,或者在导航前后执行一些逻辑。

import {useRouter} from 'vue-router'
// 找到路由器
const router = useRouter()function clickToRoute(name:string){
/*这里是路由器的两种工作模式,push和replace选取自己需要的模式参数的话跟RouterLink的to写法是一样的可以直接传字符串路径,也可以写对象....  支持传参  
*/// router.replace('/demo')router.push({name:name})
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19481.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB绘制正四面体、正六面体

MATLAB绘制正四面体、正六面体 clc;close all;clear all;warning off;% clear all rand(seed, 100); randn(seed, 100); format long g;% 正四面体&#xff08;Tetrahedron&#xff09; % 顶点坐标&#xff08;正四面体的顶点位于一个正方体的对角线上&#xff0c;并经过适当缩…

一文了解 inductive bias(归纳偏好)

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 归纳偏好&#xff08;Inductive Bias&#xff09;是机器学习中的一个非常基础但又非常重要的概念。为了更好地理解它&#xff0c;我们先从 “归纳” 和 “偏好” 这两个词开始讲解。 什么是归纳&#x…

leetcode844:比较含退格的字符串

题干 题目分析 两个字符串要进行比较&#xff0c;#代表着回车&#xff0c;也就是删除之前的字符。 若按照遍历的惯例&#xff0c;选择从前到后遍历&#xff0c;但这样没法判断&#xff0c;因为#之前被删除的部分是不需要相同的。 因此考虑到#的含义&#xff0c;我们应该选择从…

【Python爬虫实战】从入门到精通:全面解析IP代理池的原理与实战应用

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、IP代理池 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;主要功能 &#xff08;三…

c++_day2

第一题&#xff1a; 继续为 mystring类编写以下方法&#xff1a; 1&#xff1a;析构函数&#xff0c;释放buf指向的堆空间 2&#xff1a;编写 append(const mystring r) 为当前字符串尾部,拼接新的字符串r 3&#xff1a;编写 isEqual(const mystring r) 判断当前字符串和 字符串…

机器学习基础06

目录 1.梯度下降 1.1梯度下降概念 1.2梯度下降公式 1.3学习率 1.4实现梯度下降 1.5API 1.5.1随机梯度下降SGD 1.5.2小批量梯度下降MBGD 1.6梯度下降优化 2.欠拟合过拟合 2.1欠拟合 2.2过拟合 2.3正则化 2.3.1L1正则项&#xff08;曼哈顿距离&#xff09; 2.3.2…

基于一种基于OCR图像识别技术的发票采集管理系统及方法

本发明涉及了一种基于OCR图像识别技术的发票采集管理系统及方法&#xff0c;该系统的发票信息采集单元采集发票图片信息数据&#xff0c;OCR图像识别单元基于OCR图像识别技术并结合人工智能深度学习算法对发票图片信息数据进行识别读取以获得OCR图像识别结果&#xff0c;发票信…

Windows注册表基础学习

修改注册表让cmd ascii输出有颜色 reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 如何打开注册表编辑器 运行regedit 按下"Winr"组合键&#xff0c;在打开的"运行"对话框中输入"regedit"&#xff0c;单击"确定"…

CarSim复制数据注意事项

更正&#xff0c;上图中提到的“数据集”应该是“数据类别”&#xff0c;可以理解为数据集的一个子集。

Spring:注解开发依赖注入

Spring为了使用注解简化开发&#xff0c;并没有提供构造函数注入、setter注入对应的注解&#xff0c;只提供了自动装配的注解实现。 直接上代码&#xff1a; 1&#xff0c;添加一个配置类SpringConfig Configuration ComponentScan("com.itheima") //PropertySourc…

springboot006基于SpringBoot的网上订餐系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【Linux】learning notes(2)

文章目录 1、快捷键2、专业名词2.1、驱动2.2、内核2.3、U-Boot2.4、Dynamic Library and Static Library2.5、SDK / NDK / UDK 3、BUG 前文链接&#xff1a; 【Linux】learning notes 1、快捷键 在文件夹里&#xff0c;ctrll&#xff0c;选定文件夹路径 Linux下的ctrl常用组合…

商业银行核心系统单元化改造的研究与思考

随着金融科技的快速发展&#xff0c;银行核心系统面临着更高的处理能力、扩展能力及业务连续性的要求与挑战。为应对这些挑战&#xff0c;许多银行开始考虑对其核心系统进行单元化改造。本文首先分析了传统银行核心系统存在的问题以及单元化改造的必要性&#xff0c;然后详细阐…

指针

内存和地址 内存 我们知道计算上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;需要的数据是在内存中读取的&#xff0c;处理后的数据也会放回内存中&#xff0c;那我们电脑上的哪些内存空间如何高效的管理呢&#xff1f; 其实也是把内存划分为一个个的…

强大的正则表达式——Medium

由上一篇文章《Easy》中提到过的&#xff1a; 还是直接让AI写个python脚本生成难度2的正则表达式&#xff0c;但是生成的正则表达式无法成功获取到flag&#xff1a; 这里了解了一下相关知识&#xff0c;字符串形式的整数对常数求模是可以用有限状态机来实现的。对于二进制数字来…

科技改变工作方式:群晖NAS安装内网穿透实现个性化办公office文档分享(1)

文章目录 前言1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 前言 本文将详细介绍如何在群晖NAS上安装Synology Office和Synology Drive Server&#xff0c;并利用Cpolar内网穿透工具为本地文档配置固定的公网…

android:taskAffinity 对Activity退出时跳转的影响

android:taskAffinity 对Activity跳转的影响 概述taskAffinity 的工作机制taskAffinity对 Activity 跳转的影响一个实际的开发问题总结参考 概述 在 Android 开发中&#xff0c;任务栈&#xff08;Task&#xff09;是一个核心概念。它决定了应用程序的 Activity 如何相互交互以…

运算放大器的学习(三)增益带宽积

我们接着了解运放的相关指标参数&#xff0c;下面我们看下增益带宽积与压摆率. 增益带宽积:即电压增益&#xff08;Gain&#xff09;和带宽&#xff08;Bandwidth&#xff09;的乘积是一个常数&#xff0c;称为增益带宽积&#xff08;Gain Bandwidth Product&#xff09;. 增益…

ThinkPHP6门面(Facade)

门面 门面&#xff08;Facade&#xff09; 门面为容器中的&#xff08;动态&#xff09;类提供了一个静态调用接口&#xff0c;相比于传统的静态方法调用&#xff0c; 带来了更好的可测试性和扩展性&#xff0c;你可以为任何的非静态类库定义一个facade类。 系统已经为大部分…

【概率论】概率密度到底是什么

1. 书本上的定义&#xff1a; 如果对于随机变量X的分布函数F(X)&#xff0c;存在一个非负可积函数f(x)&#xff0c;使得任意实数x&#xff0c;都有&#xff1a; 称X为连续型随机变量&#xff0c;函数f(x)称为X的概率密度 所谓的概率密度&#xff0c;就是 概率/区间长度 &#…