Vue路由二(嵌套多级路由、路由query传参、路由命名、路由params传参、props配置、<router-link>的replace属性)

目录

  • 1. 嵌套(多级)路由
  • 2. 路由query传参
  • 3. 路由命名
  • 4. 路由params传参
  • 5. props配置
  • 6. `<router-link>`的replace属性

1. 嵌套(多级)路由

  1. pages/Car.vue
<template><ul><li>car1</li><li>car2</li><li>car3</li></ul>
</template><script>export default {name:'Car'}
</script>
  1. pages/Music.vue
<template><div><ul><li><a href="/music1">music1</a>&nbsp;&nbsp;</li><li><a href="/music2">music2</a>&nbsp;&nbsp;</li><li><a href="/music3">music3</a>&nbsp;&nbsp;</li></ul></div>
</template><script>export default {name:'Music'}
</script>
  1. router/index.js。使用children定义嵌套路由的url路径和组件映射规则。嵌套路由的path不用添加/
import VueRouter from 'vue-router'
import About from '../pages/About'
import News from '../pages/News'// 引入组件
import Car from '../pages/Car'
import Music from '../pages/Music'export default new VueRouter({routes:[{path:'/about',component:About},{path:'/news',component:News,// 嵌套路由children:[{path:'car',component:Car},{path:'music',component:Music}]}]
})
  1. News.vue。使用<router-link>标签进行路由的跳转,嵌套路由的to路径为url全路径。使用<router-view>标签显示激活的组件
<template><div><h2>我是News的内容</h2><div><ul class="nav nav-tabs"><li><router-link class="list-group-item" active-class="active" to="/news/car">Car</router-link></li><li><router-link class="list-group-item" active-class="active" to="/news/music">Music</router-link></li></ul><router-view></router-view></div></div>
</template><script>export default {name:'News'}
</script>
  1. 启动项目。点击Car,页面的url变成了http://localhost:8080/music1#/news/car,但是并没有重新加载一次页面。页面显示如下。导航栏的Car激活css样式,而且内容区显示Car组件的内容

Car组件

点击Music,页面的url变成了http://localhost:8080/music1#/news/music,但是并没有重新加载一次页面。页面显示如下。导航栏的Music激活css样式,而且内容区显示Music组件的内容
Music组件

2. 路由query传参

  1. Music.vue
    • for循环出3个超链接,超链接的url都是一样,就是传递的参数不一样
    • 有两种传参方式。一种是字符串写法;一种是对象写法
    • 通过<router-view>标签显示激活的Detail组件。虽然都是同一个组件,但是Detail组件由于接收的参数不一样,所以显示的内容也不一样
<template><div><ul><li v-for="m in musicList" :key="m.id"><!-- 跳转路由并携带query参数,to的字符串写法 --><!-- <router-link :to="`/news/music/detail?id=${m.id}&title=${m.title}`">{{m.title}}</router-link>&nbsp;&nbsp; --><!-- 跳转路由并携带query参数,to的对象写法 --><router-link :to="{path:'/news/music/detail',query:{id:m.id,title:m.title}}">{{ m.title }}</router-link></li></ul><hr><router-view></router-view></div>
</template><script>
export default {name: 'Music',data() {return {musicList: [{id: 1, title: 'music1'},{id: 2, title: 'music2'},{id: 3, title: 'music3'}]}}
}
</script>
  1. Detial.vue。通过$route属性接收传递过来的参数
<template><ul><li>消息编号:{{$route.query.id}}</li><li>消息标题:{{$route.query.title}}</li></ul>
</template><script>export default {name:'Detail'}
</script>
  1. src/router/index.js
import VueRouter from 'vue-router'import About from '../pages/About'
import News from '../pages/News'
import Car from '../pages/Car'
import Music from '../pages/Music'// 引入组件
import Detail from '../pages/Detail'export default new VueRouter({routes:[{path:'/about',component:About},{path:'/news',component:News,children:[{path:'car',component:Car},{path:'music',component:Music,children:[{path:'detail',component:Detail}]}]}]
})
  1. 启动项目。点击music1,页面的url变成了http://localhost:8080/#/news/music/detail?id=1&title=music1,但是并没有重新加载一次页面。页面显示如下。内容区显示Detail组件接收到id=1的相关内容

Detail组件的music1

点击music2,页面的url变成了http://localhost:8080/#/news/music/detail?id=2&title=music2,但是并没有重新加载一次页面。页面显示如下。内容区显示Detail组件接收到id=2的相关内容

Detail组件的music2

点击music3,页面的url变成了http://localhost:8080/#/news/music/detail?id=3&title=music3,但是并没有重新加载一次页面。页面显示如下。内容区显示Detail组件接收到id=3的相关内容

Detail组件的music3

3. 路由命名

应用场景: 当路由嵌套层级很多时,<router-link>的to属性的url路径很长,可以使用路由命名来简化url路径的长度

  1. src/router/index.js如下。给路由映射规则添加name属性
......省略部分......
export default new VueRouter({routes:[......省略部分......{path:'/news',component:News,children:[......省略部分......{path:'music',component:Music,children:[{name:'detail',path:'detail',component:Detail}]}]}]
})
  1. Music.vue。直接使用name属性,来替换path属性
<template><div><ul><li v-for="m in musicList" :key="m.id"><!-- 跳转路由并携带query参数,to的对象写法 --><router-link :to="{name:'detail',// path:'/news/music/detail',query:{id:m.id,title:m.title}}">{{ m.title }}</router-link></li></ul><hr><router-view></router-view></div>
</template>
......省略部分......

4. 路由params传参

  1. Music.vue
    • to的字符串写法,params参数直接拼接在url中
    • to的对象写法,使用params属性传参。这里不能使用path跳转路径,需要使用name跳转路径
<template><div><ul><li v-for="m in musicList" :key="m.id"><!-- 跳转路由并携带params参数,to的字符串写法 --><!-- <router-link :to="`/news/music/detail/${m.id}/${m.title}`">{{m.title}}</router-link>&nbsp;&nbsp; --><!-- 跳转路由并携带params参数,to的对象写法 --><router-link :to="{name:'detail',params:{id:m.id,title:m.title}}">{{ m.title }}</router-link></li></ul><hr><router-view></router-view></div>
</template>
......省略部分......
  1. src/router/index.js如下。在路由映射规则的path中,需要使用detail/:id/:title给params参数进行占位
......省略部分......
export default new VueRouter({routes:[......省略部分......{path:'/news',component:News,children:[......省略部分......{path:'music',component:Music,children:[{name:'detail',path:'detail/:id/:title',component:Detail}]}]}]
})
  1. Detail.vue。使用$route.params.id方式接收参数
<template><ul><li>消息编号:{{$route.params.id}}</li><li>消息标题:{{$route.params.title}}</li></ul>
</template><script>export default {name:'Detail'}
</script>

5. props配置

作用:让路由组件更方便的收到参数

  1. src/router/index.js。props有三种接收并传递参数的方式
    1. 值为对象。该对象中的所有key-value都会以props的形式传给Detail组件,传递的值固定
    2. 值为布尔值。若布尔值为真,把该路由组件收到的所有params参数值,以props的形式传给Detail组件
    3. 值为函数。函数自动接收$route参数。同时适用于params和query传参
......省略部分......
export default new VueRouter({routes:[......省略部分......{path:'/news',component:News,children:[......省略部分......{path:'music',component:Music,children:[{name:'detail',// path:'detail/:id/:title',component:Detail,// path:'detail',// props的第一种写法: 值为对象。该对象中的所有key-value都会以props的形式传给Detail组件,传递的值固定// props:{id:1, title:'music1'}// path:'detail/:id/:title',// props的第二种写法,值为布尔值。若布尔值为真,把该路由组件收到的所有params参数值,以props的形式传给Detail组件// props:truepath:'detail/:id/:title',// props的第三种写法,值为函数。函数自动接收$route参数。同时适用于params和query传参。这里同时使用了解构赋值语法props({params:{id,title}}){return {id:id,title:title}}}]}]}]
})
  1. Detail.vue。先使用props接收路由传递过来的参数,然后就可以直接使用了
<template><ul><!-- 常规接收参数值方法 --><!--	<li>消息编号:{{$route.params.id}}</li> --><!--	<li>消息标题:{{$route.params.title}}</li> --><!-- 使用props中的参数值 --><li>消息编号:{{id}}</li><li>消息标题:{{title}}</li></ul>
</template><script>export default {name:'Detail',// 使用props接收参数props: ['id', 'title']}
</script>

6. <router-link>的replace属性

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

浏览器的历史记录有两种写入方式:

  1. push:默认。追加历史记录。可以在浏览器进行访问的前进和后退,因为指针的指向改变了
  2. replace,替换当前指针所在的记录。不可以在浏览器进行访问的前进和后退。开启replace模式:<router-link replace>About</router-link>,或<router-link :replace="true">About</router-link>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postgresql-patroni高可用安装部署

简介 patronietcd,算是目前比较主流的PG高可用搭配了。 patroni都出4.0版本了,一直没时间&#xff0c;断断续续写了好久&#xff0c;最近有人问到&#xff0c;那就当作一个笔记发表吧&#xff0c;自行搭建一个测试库做测试吧。来来回回改了好几遍。文中可能不妨地方没有同步修…

Linux使用Clash,clash-for-linux

文件下载 clash-for-linuxhttps://link.zhihu.com/?targethttps%3A//zywang.lanzn.com/ijE2a1m7h6mb&#xff08;百度和阿里云盘都不支持这个文件分享&#xff09;。 使用须知 - 此项目不提供任何订阅信息&#xff0c;请自行准备Clash订阅地址。 - 运行前请手动更改.env文件…

掌握ChatGPT:高效利用AI助手

2023 年 3 月 15 日&#xff0c;ChatGPT-4 的诞生标志着人类进入了一个全新的 人机协作时代。这个时代就像一个混沌初开的新世界&#xff0c;而 ChatGPT 则是这个新世界里诞生的一个新物种。 这个新物种的心智如同一个四五岁的小孩&#xff0c;在与它频繁互动中&#xff0c;人…

BFS 解决边权为1的最短路问题

文章目录 边权为1的最短路问题1926. 迷宫中离入口最近的出口题目解析算法原理代码实现 433. 最小基因变化题目解析算法原理代码实现 127. 单词接龙题目解析算法原理代码实现 675. 为高尔夫比赛砍树题目解析算法原理代码实现 边权为1的最短路问题 最短路问题&#xff1a; 比如…

Effective C++笔记之二十三:非void函数不写return

一.main函数 Qt Creator查看汇编的步骤如下 上图是g编译器下的汇编 eax就是main()函数的返回值 如果删掉return 0&#xff1b; 可以发现编译器还是把eax的值设为了0&#xff0c;由此可见&#xff0c;即使在main函数中不写return 0&#xff0c;编译器还是会默认添加个return 0。…

R语言统计分析——散点图2(散点图矩阵、高密度散点图)

参考资料&#xff1a;R语言实战【第2版】 1、散点图矩阵 pairs()函数可以创建基础的散点图矩阵。下面代码用于绘制一个散点图矩阵&#xff0c;包含mtcars数据集中的mpg、disp、drat和wt四个变量&#xff1a; pairs(~mpgdispdratwt,datamtcars,main"Basic Scatter Plot M…

太阳能光伏板航拍红外图像缺陷分类数据集

太阳能光伏板航拍红外图像缺陷分类数据集。 数据集共包含11种不同的缺陷分类&#xff0c; 总共20000张图片&#xff0c; 可用来做基于深度学习的缺陷分类 近红外&#xff0c;黑白图像&#xff0c;图示经过可视化处理。 数据集名称 太阳能光伏板缺陷分类数据集&#xff08;Sola…

三相可控整流电路 (三相半波,三相桥式)

目录 1. 三相半波整流电路 2. 三相桥式全控整流电路 三相可控整流电路利用三相交流电源&#xff0c;通过可控硅&#xff08;晶闸管&#xff09;将交流电整流为直流电。主要有两种常见类型&#xff1a;三相半波整流电路和三相桥式全控整流电路。 1. 三相半波整流电路 三相半波…

《沈阳体育学院学报》

《沈阳体育学院学报》创刊于1982年&#xff0c;是由沈阳体育学院主办&#xff0c;面向国内外公开发行的体育类学术期刊&#xff1b;国际标准刊号为ISSN 1004-0560&#xff0c;国内刊号为CN 21-1081/G8&#xff1b;双月刊&#xff0c;单月中旬出版。 《沈阳体育学院学报》是中文…

宝塔部署python项目

宝塔部署-python项目文章浏览阅读559次&#xff0c;点赞11次&#xff0c;收藏9次。在添加项目后&#xff0c;选择项目所在的路径&#xff0c;然后命令行启动主py文件。具体先看项目日志&#xff0c;根据日志在环境管理处下载包。首先下载项目需要的python版本。_宝塔部署python…

LabVIEW提高开发效率技巧----VI服务器和动态调用

VI服务器&#xff08;VI Server&#xff09;和动态调用是LabVIEW中的两个重要功能&#xff0c;可以有效提升程序的灵活性、模块化和可扩展性。通过这两者的结合&#xff0c;开发者可以在运行时动态加载和调用VI&#xff08;虚拟仪器&#xff09;&#xff0c;实现更为复杂的应用…

C++和OpenGL实现3D游戏编程【目录】

欢迎来到zhooyu的专栏。 个人主页&#xff1a;【zhooyu】 文章专栏&#xff1a;【OpenGL实现3D游戏编程】 贝塞尔曲面演示&#xff1a; 贝塞尔曲面演示zhooyu 本专栏内容&#xff1a; 我们从游戏的角度出发&#xff0c;用C去了解一下游戏中的功能都是怎么实现的。这一切还是要…

基于yolov8的无人机检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的无人机检测系统是一项前沿技术&#xff0c;结合了YOLOv8深度学习模型的强大目标检测能力与无人机的灵活性。YOLOv8作为YOLO系列的最新版本&#xff0c;在检测精度和速度上均有显著提升&#xff0c;特别适用于复杂和高动态的场景。 该系统通过捕获实…

论文笔记:基于LLM和多轮学习的漫画零样本角色识别与说话人预测

整理了ACM MM2024 Zero-Shot Character Identification and Speaker Prediction in Comics via Iterative Multimodal Fusion&#xff09;论文的阅读笔记 背景模型框架实现细节 实验数据集实验可视化消融实验 背景 最近读到一篇新文章&#xff0c;主要是做漫画中的零样本角色识…

pikachu下

CSRF(跨站请求伪造) CSRF(get) url变成了这样了&#xff0c;我们就可以新开个页面直接拿url去修改密码 http://pikachu-master/vul/csrf/csrfget/csrf_get_login.php?username1&password2&submitLogin CSRF(post&#xff09; 这里只是请求的方式不同&#xff0c;…

HC-SR04超声波传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 ultrasonic.h文件 ultrasonic.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 HC-SR04超声波传感器是通过发送和接收超声波&#xff0c;利用时间差和声音传播速度…

带你深入了解C语言指针(四)

目录 前言一、回调函数是什么&#xff1f;二、qsort使用1.什么是qsort2.qsort函数的语法解析3.回顾冒泡排序4.使用qsort函数排序整型数据4.1 思路分析4.2 完整代码&#xff1a;4.3 总体逻辑展现 5.使用qsort函数排序结构数据5.1 strcmp( )函数5.2 思路分析5.2.1 按名字比较5.2.…

力扣每日一题 公交站间的距离

环形公交路线上有 n 个站&#xff0c;按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离&#xff0c;distance[i] 表示编号为 i 的车站和编号为 (i 1) % n 的车站之间的距离。 环线上的公交车都可以按顺时针和逆时针的方向行驶。 返回乘客从出发点 start 到目…

C# 使用Socket通信,新建WinForm服务端、客户端程序

一、新建WinForm Socket服务端程序 注&#xff1a;rtbReceviceMsg为RichTextBox控件 服务端程序、界面 服务端代码 public partial class Form1 : Form {public Form1(){InitializeComponent();}public virtual void TriggerOnUpdateUI(string message){if (this.InvokeRequir…

Oracle发送邮件功能:配置自动化发信指南?

Oracle发送邮件服务设置方法&#xff1f;怎么用Oracle数据库发信&#xff1f; Oracle数据库作为企业级应用的核心&#xff0c;其内置的发送邮件功能为企业提供了强大的自动化工具。AokSend将详细介绍如何配置Oracle发送邮件功能&#xff0c;以实现自动化发信&#xff0c;从而提…