Vue3-29-路由-编程式导航的基本使用

news2024/12/24 20:53:19

补充一个知识点

路由配置中的 name 属性 :
可以给你的 路由 指定 name属性,称之为 命名路由
这个 name 属性 在 编程式导航 传参时有重要的作用。

命名路由的写法如下 :
像指定 path 一样,直接指定一个 name 属性即可。
    {
        path:'/d',
        name:'dName',
        component:componentC
    }

什么是编程式导航

编程式导航 是相对于 <router-link> 标签的 路由方式来讲的。
<router-link> 的方式称之为 声明式导航
编程式导航 : 就是在 代码中,通过调用 路由实例对象的 API 的方式,实现路由的导航。
编程式导航的关键是 : 路由实例对象
路由实例对象中包含了 跳转路由的方法。
路由实例对象可以通过 useRouter() 这个API 来获取到。
下面我们来介绍一下这些方法。

编程式导航的关键方法的介绍

push() : 正常的跳转路由,会添加到浏览器的历史记录中,(用的最多的);
replace() : 取代当前的路由,跳转到目标路由,不会添加到浏览器的历史记录中;
go() : 在浏览的历史记录的堆栈中随意向前或向后跳转几个路由;(不太推荐使用)。
下面的描述中 使用 routerObj 表示路由实例对象

push() 【重点】

push() 方法可以有以下几种使用方式 : 

1、直接传入目标路由字符串
	routerObj.push('/a')
	
2、传入对象
	2.1 、只带 path 属性的对象
		routerObj.push({path:'/a'})
		
	2.2 、带参数路由 : 命名路由的方式 (name + params对象)
		routerObj.push({name:'/a',params:{p1:1001}})
		
	2.3 、带参数路由 :直接链接后缀的方式 (path + query对象)
		routerObj.push({path:'/a',query:{p1:2002}})
		
【特别注意】 :  2.2 和 2.3 是固定的格式!!!
  如果 路由中同时存在 path 和 params,则 params 会被忽略!

replace()

替换当前位置。
相当于 在 push 方法的参数对象中添加 replace 属性,
就像下面这样 :push({path:'/a', replace : true})

go()

此方法的参数是整数,
正数 : 表示向前跳转,
	routerObj.go(1) : 相当于 routerObj.forward()
负数 : 表示向后跳转,
	routerObj.go(-1) : 相当于 routerObj.back()

当参数过大或过小,没有那么多记录可以跳转的时候,默认会跳转失败。
例如 :
	routerObj.go(100)
	routerObj.go(-100)

案例代码

下面的案例代码主要展示核心的代码部分 :
路由配置、跳转逻辑代码。

案例项目目录结构 :
projectName
	| -- src
		| -- App.vue # 根组件
		| -- componentA.vue # 组件A
		| -- componentB.vue # 组件B
		| -- main.ts # 项目的入口逻辑文件
		| -- router.ts # 路由的核心配置文件
	| -- index.html # 项目的html 页面

push() 的案例 (重点)

本案例展示常用的 两种方式: 
	带参数路由 : 命名路由的方式 (name + params对象)
	routerObj.push({name:'/a',params:{p1:1001}})

  	带参数路由 :直接链接后缀的方式 (path + query对象)
	routerObj.push({path:'/a',query:{p1:2002}})

其他的形式和可以类比此方式进行操作。

router.ts 中的 路由配置


// 导入 定义路由的两个方法
import {createRouter,createWebHistory}  from 'vue-router'

// 引入两个组件
import componentA from "./componentA.vue";
import componentB from "./componentB.vue";

// 声明路由跳转的路径与组件的对应关系
const routsList = [
    {
        path:'/a/:p1/:p2', // 声明 两个参数
        name:'aroute',
        component:componentA
    },
    {
        path:'/b',
        name:'broute',
        component:componentB
    },

]

// 创建路由的实例对象
const routerConfigObj = createRouter({
    history:createWebHistory('abc'), // 带一个参数,表示是路由的一个前缀
    routes:routsList // 指定路由的配置列表
})

// 导出路由的对象
export default routerConfigObj;

App.vue 中 使用 编程式导航 : 核心操作
有两个按钮,
一个 跳转到 组件A,name + params 方式
一个跳转到 组件B,path + query 方式

<template>

    <div class="basediv">
      
        APP.vue 中的 msg : {{ msg }}

        <br>   
        <button @click="pushToA">路由到组件A</button>
        <br>
        <button @click="pushToB">路由到组件B</button>
        <br>
        <br><br><br>
        <!-- router-view 进行目标组件的展示 -->
        <router-view></router-view>
    
    </div>
    
</template>
    
<script setup lang="ts">

	// 引入 provide 方法
    import { ref } from 'vue'

    // 引入路由配置实例 与 当前路由对象
    import { useRouter } from 'vue-router';

    // 声明父组件的一个变量
    const msg = ref('这是App根组件的msg变量')

    // 接收一下路由实例对象 对象
    const routerObj = useRouter();

    // 路由跳转到 A组件的处理方法
    const pushToA = ()=>{
        routerObj.push({
            name:'aroute',
            params:{
                p1:'java',
                p2:'push的第二个参数p2'
            }
        })
    }

    // 路由跳转到 B组件的处理方法
    const pushToB = ()=>{
        routerObj.push({
            path:'/b',
            query:{
                p3:'vue3',
                p4:'路由的跳转'
            }
        })
    }
    
   console.log('App.vue 根组件 中 的history :',window.history) 

</script>
    
<style scoped>

    .basediv{
        width: 600px;
        height: 400px;
        border: 1px solid red;
    }
</style>

componentA.vue : 组件A ,打印路由对象,查看路由跳转和参数是否传递正常

<template>
    <div class="diva">
        这是组件A
    </div>
</template>

<script setup lang="ts">

    // 引入两个路由相关的方法
    import { useRouter,useRoute} from 'vue-router';

    // 声明 路由实例对象 和 当前路由对象
    const routerObj = useRouter()
    const currentRoute = useRoute()

    // 打印一下路由实例对象 和 当前路由对象
    console.log('A 组件 中 路由实例对象 :',routerObj)
    console.log('A 组件 中 当前路由对象 :',currentRoute)
    
    console.log('A 组件 中 的history :',window.history)

</script>

<style scoped>
    .diva{
        width: 200px;
        height: 200px;
        background: red;
    }
</style>

componentB.vue : 组件B ,打印路由对象,查看路由跳转和参数是否传递正常

<template>
    <div class="divb">
        这是组件B
    </div>
</template>

<script setup lang="ts">

    // 引入两个路由相关的方法
    import { useRouter,useRoute} from 'vue-router';

    // 声明 路由实例对象 和 当前路由对象
    const routerObj = useRouter()
    const currentRoute = useRoute()

    // 打印一下路由实例对象 和 当前路由对象
    console.log('B 组件 中 路由实例对象 :',routerObj)
    console.log('B 组件 中 当前路由对象 :',currentRoute)
    
    console.log('B 组件 中 的history :',window.history)

</script>

<style scoped>
    .divb{
        width: 200px;
        height: 200px;
        background: green;
    }
</style>

效果展示

》1、初始状态
在这里插入图片描述

》2、点击跳转到 组件A

在这里插入图片描述

》3、点击跳转到 组件B

在这里插入图片描述

》 4、点击浏览器的返回 按钮,会回退到上一个地址
在这里插入图片描述

replace() 的案例

案例和上面的案例代码一致,
唯一的不同点就是 将 push 替换为replace

但是运行结果却是极大的不一致!

push() 的运行结果,点击浏览器的【后退】按钮,是可以正常回退的;
replace() 的运行结果,点击浏览器的【后退】按钮,是不可以回退的;

》1、初始状态
在这里插入图片描述

》2、点击跳转组件A
在这里插入图片描述

》3、点击跳转组件B
在这里插入图片描述

》4、点击回退
在这里插入图片描述

go() 的案例

本案例只展示一下写法,就不再做具体的效果展示了。

<template>
    <div class="basediv">
      
        APP.vue 中的 msg : {{ msg }}

        <br>   

        <button @click="goBack">后退一个路由</button>
        <br>
        <button @click="goForward">向前一个路由</button>
        <br>
        <br><br><br>
        <!-- router-view 进行目标组件的展示 -->
        <router-view></router-view>
    
    </div>
</template>
    
<script setup lang="ts">

	// 引入 provide 方法
    import { ref } from 'vue'

    // 引入路由配置实例 与 当前路由对象
    import { useRouter } from 'vue-router';

    // 声明父组件的一个变量
    const msg = ref('这是App根组件的msg变量')

    // 接收一下路由实例对象 和 当前路由 对象
    const routerObj = useRouter();


	// 关键 :后退一个
    const goBack = ()=>{
        routerObj.go(-1)
    }
	// 关键 :前进一个
    const goForward = ()=>{
        routerObj.go(1)
    }

    console.log('App.vue 根组件 中 的history :',window.history) 

</script>
    
<style scoped>
    .basediv{
        width: 600px;
        height: 400px;
        border: 1px solid red;
    }
</style>

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

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

相关文章

使用rust读取usb设备ACR122U的nfc卡片id

rust及其高效和安全著称&#xff0c;而且支持跨平台&#xff0c;所以就想使用这个rust开发一个桌面端程序&#xff0c;来读取nfc设备的nfc卡片的id信息&#xff0c;下面就做一个最简单的入门教程吧&#xff0c;也是我写的第三个rust应用。 当你电脑上安装好了rust环境之后&…

Android笔记(二十二):Paging3分页加载库结合Compose的实现网络单一数据源访问

Paging3 组件是谷歌公司推出的分页加载库。个人认为Paging3库是非常强大&#xff0c;但是学习难点比较大的一个库。Paging3组件可用于加载和显示来自本地存储或网络中更大的数据集中的数据页面。此方法可让移动应用更高效地利用网络带宽和系统资源。在具体实现上&#xff0c;Pa…

详解Keras3.0 Layer API: Dropout layer

Dropout layer 图1 标准的神经网络 图2 加了Dropout临时删除部分神经元 Dropout层的作用是在神经网络中引入正则化&#xff0c;以防止过拟合。它通过随机丢弃一部分神经元&#xff08;如图2&#xff09;的输出来减少模型对训练数据的依赖性。这样可以提高模型的泛化能力&#x…

激活Windows过程及报错解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上, 运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本

激活Windows过程及报错问题解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上&#xff0c;运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本。 前言 最近在激活Windows过程中&#xff0c;遇到了报错: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上…

iS-RPM2023.2.0.0新版本发布

引言 经过不断努力和精心打磨,我们带着全新版本的RPM产品与大家见面啦!本次更新将为广大流程分析师和质量管理员们提供更深入、更准确的洞察力,以帮助大家在数据驱动的决策中取得更卓越的成果。然而,让海量数据转化为可用的见解并不是一项容易的任务。我们理解数据分析师们…

工业4G 物联网网关——机房动环监控系统应用方案介绍

机房动环监控系统是什么&#xff1f;机房动环监控系统的全称为机房动力环境监控系统&#xff0c;是一套安装在机房内的监控系统&#xff0c;可以对分散在机房各处的独立动力设备、环境和安防进行实时监测&#xff0c;统计和分析处理相关数据&#xff0c;第一时间侦测到故障发生…

万界星空科技车间生产管理系统解决方案

车间管理系统解决方案:   &#xff08;一&#xff09;车间生产计划管理解决方案   车间管理系统解决方案对于一般的生产计划&#xff0c;需完成编制、审批、下达、执行、完工等操作&#xff0c;车间管理系统解决方案立足于减少中间环节浪费&#xff0c;节约成本&#xff0c…

小米电脑管家 - 手机平板电脑家居互联

系列文章目录 前言 联想电脑安装小米电脑管家实现设备互联 如图&#xff0c;将 小米平板 5 Pro 作为联想笔记本 GeekPro 5000 &#xff08;这垃圾电脑&#xff09;的副屏。 可以在小米平板控制笔记本&#xff0c;如图所示 一、官方使用手册 参考&#xff1a;小米电脑管家帮助 …

WebGL以及wasm的介绍以及简单应用

简介 下面主要介绍了WebGL和wasm,是除了html,css,js以外Web标准所支持的另外两个大件 前者实现复杂的图形处理,后者提供高效的代码迁移以及代码执行效率 WebGL 简介 首先,浏览器里的游戏是怎么做到这种交互又显示不同的画面的? 试想用我们的前端三件套实现一下.好像可以…

clickhouse连接工具dbeaver

地址 地址&#xff1a; Download | DBeaver Community 安装 表引擎 表引擎之TinyLog 以列文件的形式保存在磁盘上&#xff0c;不支持索引&#xff0c;没有并发控制。一般保存少量数据的小表&#xff0c; 生产环境上作用有限&#xff0c;多用于平时练习测试用。 内存引擎&am…

【C++】Ubuntu编译filezilla client

在新版Ubuntu 22.04.3 LTS上编译filezilla client成功&#xff0c;shell命令如下&#xff1a; sudo apt-get install libfilezilla-dev libwxbase3.0-dev gnutls-dev libdbus-1-dev sudo apt-get install libwxgtk3.0-gtk3-dev sudo apt-get install libgtk-3-dev sudo apt-ge…

VSCode Python开发环境配置

目录 1 插件安装2 Debug和测试配置常见问题 1 插件安装 1.1 基础编译插件&#xff0c;Python、Pylance 1.2 修改语言服务器类型&#xff0c;进入用户配置页面搜索Python: Language Server&#xff0c;选择Pylance&#xff08;一定要修改可以提供很多语法提示&#xff09; 1…

初识智慧城市

文章目录 智慧家居 智慧社区 智慧交通 智慧医疗 智慧教育 智慧旅游 智慧农业 智慧安防 智慧家居 利用智能语音、智能交互等技术,实现用户对家居系统各设备的远程操控和能控制如开关窗帘(窗户)、操控家用电器和照明系统、打扫卫生等操作。利用计算机视觉等技术,对被照看…

3d光学轮廓仪测微光学器件应用及其重要意义

微光学器件是光学器件的重要分支&#xff0c;为光学通信、光传感、光计算等领域的发展提供重要支撑。微光学器件具有尺寸小、功耗低、低成本等优势&#xff0c;可以于电子器件集成&#xff0c;实现更高效的数据传输和信号处理。未来&#xff0c;随着微纳加工技术的进一步发展&a…

交换两个数字的三种方法-LeetCode做题总结 344

344. 反转字符串 题解Java知识点交换两个数字的三种方法1、temp2、异或3、 题解 class Solution {public void reverseString(char[] s) {char temp;for(int i0,js.length-1; i<j; i,j--) {temp s[i];s[i] s[j];s[j] temp;}} }Java知识点 交换两个数字的三种方法 1、t…

shell打印粉色小心心、颜文字心心

#!/bin/bash # *********************************************************# # # # * Author : 白嫖一茶 # # * QQ邮箱址 : 2534824121qq.com # #…

【算法与数据结构】435、LeetCode无重叠区间

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;思路和【算法与数据结构】452、LeetCode用最少数量的箭引爆气球类似&#xff0c;也是排序找重叠区间。…

前端算法之双指针

双指针 分类 快慢指针&#xff08;同向&#xff09;对向、背向指针 例子&#xff1a;最接近的三数之和例子&#xff1a;通过删除字母匹配到字典里最长单词 双指针 双指针是一种编程技术&#xff0c;通常用于解决数组或链表的问题。 双指针法使用两个指针&#xff08;通常称为…

【Shell编程练习】监控内存和磁盘容量,小于给定值时报警

系列文章目录 输出Hello World 通过位置变量创建 Linux 系统账户及密码 系列文章目录分析代码实现运行结果 分析 对于磁盘容量&#xff0c;可以使用df命令查看指定指定分区的磁盘使用情况。比如 然后我们需要从这段输出中提取我们想要的信息。在这里就是Available字段的值。…

Vue3-31-路由-RouterView的name属性的作用

作用描述 <router-view> 标签是用来渲染路由对应的组件的位置&#xff1b; 默认情况下&#xff0c;一个路由是只对应一个组件的。 但是&#xff0c;可以通过给 <router-view> 指定 name 属性的方式&#xff0c;实现同时渲染多个组件的效果。 这也叫做 命名视图。 注…