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

news2024/9/20 17:07:36

目录

  • 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:true

							path:'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.coloradmin.cn/o/2140367.html

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

相关文章

进程启动和进程终止

文章目录 进程程序进程进程ID进程表项C程序的启动过程启动例程进程终止atexit函数示例--终止函数的执行流程以及多种进程终止方式的对比 进程启动和退出流程图查看系统中的进程 进程 程序 程序是存放在磁盘文件中的可执行文件。当代码进行编辑保存后使用gcc等编译工具进行编译…

【机器学习】OpenCV入门与基础知识

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 OpenCV入门与基础知识简介安装与环境配置WindowsLinuxmacOS 核心数据结构MatSca…

Linux:进程状态和优先级

一、进程状态 1.1 操作系统学科&#xff08;运行、阻塞、挂起&#xff09; 为了弄明白正在运行的进程是什么意思&#xff0c;我们需要知道进程的不同状态 大多数操作系统都遵循以下原则 1.1.1 运行状态 因为有一个调度器需要确保CPU的资源被合理使用&#xff0c;所以需要维护…

【C++】学完c语言后的c++基础知识补充!(命名空间、输入和输出、缺省函数、函数重载、引用、内联函数代替宏、nullptr代替NULL)

一. 命名空间 1. 定义 出现的意义&#xff1a;解决各种函数、关键词和类的名称冲突问题。 定义方式&#xff1a;namespace 命名空间的名字 { } &#xff08;注意&#xff01;}后面不加&#xff1b;&#xff09; namespace 是关键词命名空间的…

CenterNet官方代码—目标检测模型推理部分解析与项目启动

CenterNet模型推理部分解析 CenterNet官方代码环境部署 CenterNet作为2019年CVPR推出的论文&#xff0c;论文中给出了官方代码所在的github仓库地址。https://github.com/xingyizhou/CenterNet。 整个代码的代码量并不是特别大&#xff0c;但整个项目的难点在于使用了老版本的…

横向移动-WMI

什么是WMI? WMI是基于 Web 的企业管理 (WBEM) 的 Windows 实现&#xff0c;WBEM 是跨设备访问管理信息的企业标准。 WBEM&#xff08;Web-Based Enterprise Management&#xff09;是一个开放标准&#xff0c;用于跨平台和跨设备的管理信息访问。WMI&#xff08;Windows Mana…

VMware Fusion虚拟机Mac版 安装Win10系统教程

Mac分享吧 文章目录 Win10安装完成&#xff0c;软件打开效果一、VMware安装Windows10虚拟机1️⃣&#xff1a;准备镜像2️⃣&#xff1a;创建虚拟机3️⃣&#xff1a;虚拟机设置4️⃣&#xff1a;安装虚拟机&#xff08;步骤和Win11安装步骤类似&#xff0c;此处相同步骤处没换…

C++从入门到起飞之——继承下篇(万字详解) 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、派⽣类的默认成员函数 1.1 四个常⻅默认成员函数 1.2 实现⼀个不能被继承的类 ​编辑 2. 继承与友…

词嵌入(二):基于上下文窗口的静态词嵌入(从NNLM、CW模型谈到基于层次Softmax、负采样的Word2Vec模型)

文章目录 一、经典神经语言模型&#xff08;A Neural Probabilistic Language Model&#xff09;二、C&W模型 (Collobert and Weston, 2008)2.1 文章背景2.2 模型架构&#xff08;词向量的表示&#xff09;2.2.1 Lookup-Table Layer&#xff08;查找表&#xff09;2.2.2 TD…

STM32关于keil使用过程中遇到的问题

1.设备管理器STlink驱动确认安装完成&#xff0c;但是keil里一直识别不到&#xff0c;换下载器也没用 &#xff08;1&#xff09;问题描述 我的问题是这样产生的&#xff1a;之前用标准库开发STM32的时候&#xff0c;STLink能够正常使用&#xff0c;然后使用HAL库开发的时候出…

仓储管理系统的设计与实现SSM框架

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

electron react离线使用monaco-editor

目录 1.搭建一个 electron-vite 项目 2.安装monaco-editor/react和monaco-editor 3.引入并做monaco-editor离线配置 4.react中使用 5.完整代码示例 6.monaco-editor离线配置官方说明 7.测试 1.搭建一个 electron-vite 项目 pnpm create quick-start/electron 参考链接…

React学习day06-异步操作、ReactRouter的概念及简单使用

13、续 &#xff08;8&#xff09;异步状态操作 1&#xff09;在子仓库中 ①创建仓库 ②解构需要的方法 ③安装axios ④封装并导出请求 ⑤在reducer中为newsList赋值 ⑥获取并导出reducer函数 2&#xff09;在入口文件index.js中&#xff0c;注入 3&#xff09;在App.js中&a…

Vue.js入门系列(二十九):深入理解编程式路由导航、路由组件缓存与路由守卫

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

爬虫--翻页tips

免责声明&#xff1a;本文仅做分享&#xff01; 伪线程 from DrissionPage import ChromiumPage import timepage ChromiumPage() page.get("https://you.ctrip.com/sight/taian746.html") # 初始化 第0页 index_page 0# 翻页点击函数 sleep def page_turn():page…

【Linux修行路】网络套接字编程——UDP

目录 ⛳️推荐 前言 六、Udp Server 端代码 6.1 socket——创建套接字 6.2 bind——将套接字与一个 IP 和端口号进行绑定 6.3 recvfrom——从服务器的套接字里读取数据 6.4 sendto——向指定套接字中发送数据 6.5 绑定 ip 和端口号时的注意事项 6.5.1 云服务器禁止直接…

C++复习day12

IO流 一、C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据&#xff0c;并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。 注意宽度输出和精度输出控制。C语言借助了…

【C++】多态and多态原理

目录 一、多态的概念 二、多态的定义及实现 &#x1f31f;多态的构成条件 &#x1f31f;虚函数 &#x1f31f;虚函数的重写 &#x1f320;小贴士&#xff1a; &#x1f31f;C11 override 和 final &#x1f31f;重载、重写&#xff08;覆盖&#xff09;、重定义&#xf…

POD内的容器之间的资源共享

概述 摘要&#xff1a;本文通过实践描述并验证了pod内容器如何实现网络、文件、PID、UTC、mount的共享。 pod实战之容器内资源共享与隔离 container容器之间的共享实战 从实际场景说起&#xff1a;有2个容器nginx与wordpress分别运行了紧密耦合且需要共享资源的应用程序。我…

英语学习交流平台|基于java的英语学习交流平台系统小程序(源码+数据库+文档)

英语学习交流平台系统小程序 目录 基于java的英语学习交流平台系统小程序 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&…