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.xdnf.cn/news/1535216.html

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

相关文章

【Java面试】第七天

&#x1f31f;个人主页&#xff1a;时间会证明一切. 目录 有三个线程T1,T2,T3如何保证顺序执行&#xff1f;依次执行start方法使用join使用CountDownLatch使用线程池使用CompletableFuture Spring Bean的生命周期是怎么样的&#xff1f;Autowired和Resource的关系&#xff1f;相…

读取CSV中文件报ArrayIndexOutOfBounds异常

序言 有个需求要将csv文件入库&#xff0c;之前测试的文件都是可以正常解析入库的&#xff0c;但新提供的一个csv文件读取的时候捕获的异常信息就总是提示&#xff1a;Index 1 out of bounds for length 1。 读取csv文件的方法 public static List<Map<String, Object…

8.6小波变换(Wavelet Transform)边缘检测

实验原理 由于OpenCV本身并不直接支持小波变换&#xff08;Wavelet Transform&#xff09;&#xff0c;我们需要借助一些技巧来实现它。一种常见的方法是利用离散余弦变换&#xff08;DCT&#xff09;或离散傅立叶变换&#xff08;DFT&#xff09;来近似实现小波变换的功能。但…

【机器学习(六)】分类和回归任务-LightGBM算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09;Histogram&#xff08;二&#xff09;GOSS1、信息增益2、近似误差 &#xff08;三&#xff09;EFB 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、LightGBM分类任务实现对比&a…

AI基础 L21 Quantifying Uncertainty and Reasoning with Probabilities III

Bayesian Networks 1 Bayesian Networks • A Bayesian Network (BN) represents the dependencies among variables and encodes the full joint probability distribution concisely. • A BN is a directed graph, where each node is annotated with probability informati…

[项目][WebServer][CGI机制 设计]详细讲解

目录 1.何为CGI机制&#xff1f;2.理解CGI机制3.CGI接口设计1.ProcessNonCgi2.ProcessCgi 1.何为CGI机制&#xff1f; CGI(Common Gateway Interface)是外部应用程序(CGI程序)与WEB服务器之间的接口标准&#xff0c;是在CGI程序和WEB服务器之间传递信息的过程 2.理解CGI机制 …

[XILINX] 正点原子ZYNQ7015开发板!ZYNQ 7000系列、双核ARM、PCIe2.0、SFPX2,性能强悍,资料丰富!

正点原子ZYNQ7015开发板&#xff01;ZYNQ 7000系列、双核ARM、PCIe2.0、SFPX2&#xff0c;性能强悍&#xff0c;资料丰富&#xff01; 正点原子Z15 ZYNQ开发板&#xff0c;搭载Xilinx Zynq7000系列芯片&#xff0c;核心板主控芯片的型号是XC7Z015CLG485-2。开发板由核心板&…

JAVA开源项目 在线视频教育平台 计算机毕业设计

本文项目编号 T 027 &#xff0c;文末自助获取源码 \color{red}{T027&#xff0c;文末自助获取源码} T027&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…

【数据结构与算法 | 灵神题单 | 合并链表篇】力扣2, 21, 445, 2816

1. 力扣2&#xff1a;两数相加 1.1 题目&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可…

o1模型:引领AI技术在STEM领域的突破与应用

o1模型是OpenAI最新推出的大型语言模型&#xff0c;它在多个领域展现出了卓越的能力&#xff0c;被认为是AI技术发展的一个重要里程碑。以下是对o1模型的详细介绍和分析&#xff1a; o1模型的简介和性能评估 o1模型在物理、化学、生物学等领域的基准任务上达到了博士生水平&…

Android Studio:驱动高效开发的全方位智能平台

目录 Android Studio 1. 智能的代码编辑与自动补全 2. 快捷键与代码模板 3. 强大的调试工具 4. 实时分析与性能优化 5. 集成的 Gradle 构建系统 6. 持续集成与自动化 7. 版本控制与团队协作 8. 丰富的插件生态与定制化 9. 快速布局与 UI 设计工具 9. 即时运行&#…

数字IC设计\FPGA 职位经典笔试面试--整理

注&#xff1a; 资料都是基于网上一些博客分享和自己学习整理而成的 1&#xff1a;什么是同步逻辑和异步逻辑&#xff1f; 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。 同步时序 逻辑电路的特点&#xff1a;各触发器的时钟端全部连接在一…

MySQL权限管理(DCL)总结

黑马程序员老师讲的非常好 第一个用户管理偏向于开发人员 第二个权限控制偏向于管理人员 但是怎么说呢&#xff0c;你毕竟学mysql了&#xff0c;都得学一学吧。只有精通&#xff0c;实力到位&#xff0c;才能被别人所认可&#xff01;

【打印管理】水印设置支持表单内容

09/11 主要更新模块概览 水印设置 拖动排序 恢复默认 其他更新 01 表单管理 1.1 【打印管理】-水印设置新增支持表单内容 说明&#xff1a; 在打印管理的水印设置中&#xff0c;原本仅支持企业名称作为水…

ROS笔记3.路径规划1

在 Rviz 中可视化路径规划move_base 节点的基本概念什么是Global Planner&#xff1f;什么是Global Costmap&#xff1f; 在 Rviz 中可视化路径规划 对于本章&#xff0c;您基本上需要使用 RViz 的 3 个元素&#xff1a; Map Display (Costmaps)Path Displays (Plans)2D 工具 …

加速开发体验:为 Android Studio 设置国内镜像源

Android Studio 是由 JetBrains 开发的一个官方 IDE&#xff0c;用于 Android 应用开发。由于网络原因&#xff0c;直接从 Google 的服务器下载可能会比较慢或者不稳定。幸运的是&#xff0c;我们可以通过配置国内镜像源来加速下载和更新。 文章目录 &#x1f4af; 修改 Gradle…

Go协程及并发锁应用指南

概念 协程&#xff08;Goroutine&#xff09;是Go语言独有的并发体&#xff0c;是一种轻量级的线程&#xff0c;也被称为用户态线程。相对于传统的多线程编程&#xff0c;协程的优点在于更加轻量级&#xff0c;占用系统资源更少&#xff0c;切换上下文的速度更快&#xff0c;不…

如何快速清理Docker中的停止容器?

如何快速清理Docker中的停止容器? 方法一:使用`docker container prune`方法二:结合`docker ps`和`docker rm`注意(这些命令慎用,确定容器不需要之后再执行)💖The Begin💖点点关注,收藏不迷路💖 Docker容器在停止后可能会占用不必要的磁盘空间。如何清理这些停止的…

linux 双网卡服务器突然断电后网卡单通故障解决

某台linux 双网卡服务器突然断电后网卡单通故障解决 故障现象&#xff1a;断电后重启服务器&#xff0c;主用网卡IP只能同网段访问&#xff0c;其他网段无法访问&#xff0c;备用网卡则正常&#xff1b; 解决方案&#xff1a;route -n查询路由信息&#xff0c;发现主网卡路由…

el-table的树形结构结合多选框使用,实现单选父子联动,全选,反选功能

<template><div><el-table:data"tableData":row-key"rowKey":default-expand-all"defaultExpandAll":tree-props"treeProps"><!-- 开启树形多选 --><el-table-column v-if"showSelection" width…