Vue3实战笔记(22)—路由Vue-Router 实战指南(路由传参)

news2024/9/22 21:29:27

文章目录

  • 前言
  • 一、路由router-link
  • 二、路由传参
    • 1.query方式
    • 2.params方式
    • 3.props传参
  • 总结


前言

vue-router 是 Vue.js 官方路由管理器。它和 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得易如反掌。
前面提到过简单的使用路由,直到上文使用404界面发现了个问题,和路由相关,觉得需要掌握的还很多,打算花点时间好好深入的学习一下,路由出山后我觉得问题就能迎刃而解了。


一、路由router-link

前文中我们已经配置好了一些路由,先列出来作为准备工作:

//路由器
import {createRouter,createWebHistory} from 'vue-router'

import Home from '@/views/Home.vue'
import HelloSH from '@/views/HelloSH.vue'
import About from '@/views/About.vue'
import Login from '@/views/Login.vue'
import CheckboxVue from '@/views/Checkbox.vue'
import vList from '@/components/vlist.vue'

import notFound from '@/views/errors/404.vue'


//创建路由器
const router = createRouter({
    history:createWebHistory(),
    routes:[
        {
            path:'/',
            component:Home
        },
        {
            path:'/hellosh',
            component:HelloSH
        },
        {
            path:'/about',
            component:About
        },
        {
            path:'/login',
            component:Login
        },
        {
            path:'/checkbox',
            component:CheckboxVue
        },
        {
            path:'/vlist',
            component:vList
        },
        {
            // 会匹配所有路径
            path: "/:pathMatch(.*)*",
            redirect: '/404'
        },
        {
            path:'/404',
            components:{mainLayout:notFound}
        }
        
    ]
})

使用一个自定义组件 router-link 来创建链接。这使得 Vue Router 可以在不重新加载页面的情况下更改 URL,处理 URL 的生成以及编码。
我在首页增加了两个router-link标签,注意有两种写法:

<template>
    <v-app>
        <v-main>
            <div style="font-size:100px; color:black; position:fixed;box-shadow: 0px 0px 0px #ccc; left:50%;top:33%; " >首页</div>
            <div style="font-size:80px; color:black; position:fixed;box-shadow: 0px 0px 0px #ccc; left:50%;top:50%; " ><RouterLink to="/vlist" >to list</RouterLink> </div>
            <div style="font-size:80px; color:black; position:fixed;box-shadow: 0px 0px 0px #ccc; left:50%;top:70%; " ><router-link to="/checkbox" >to checkbox</router-link> </div>


        </v-main>
    </v-app>
</template>

<script setup lang='ts' name="Home">

</script>

<style lang='less' scoped></style>

在这里插入图片描述
分别点击跳转到了相应的路由:
在这里插入图片描述
在这里插入图片描述
这个标签比较简单也比较常用就不多说了。

二、路由传参

路由跳转时候经常需要传递参数,再学习几种传参方式。

1.query方式

类似get请求的传参方式,用问号标志,&分隔:,在router-link中:


<div style="font-size:80px; color:black; position:fixed;box-shadow: 0px 0px 0px #ccc; left:50%;top:80%; " >
    <router-link to="/studyRoute?id=123456&name=shanhua" >
        to studyRoute
    </router-link> 
</div>

路由配置:

import studyRoute from '@/views/study/Route.vue'
 
 ...
 
  {
      path:'/studyRoute/:id', //params方式
      components:{default:studyRoute}
  }

StudyRoute.vue:


<template>
    <div>
            
            query-------<br>
            id:{{$route.query.id}}
            <br>
            name:{{$route.query.name}}
            
    </div>

</template>

<script setup lang="ts" name="">
</script>

<style lang='scss' scoped>
</style>

页面展示效果:
在这里插入图片描述
还有另一种写法:

 <div style="font-size:80px; color:black; position:fixed;box-shadow: 0px 0px 0px #ccc; left:50%;top:80%; " >
      <router-link :to=
      "{
          path:'/studyRoute',
          query:{
              id:'12345',
              name:'shanhua'
          }
      }">
          to studyRoute
      </router-link> 
  </div>

2.params方式

在router-link中:


<div style="font-size:80px; color:black; position:fixed;box-shadow: 0px 0px 0px #ccc; left:50%;top:80%; " >
    <router-link to="/studyRoute/123456/shanhua" >
        to studyRoute
    </router-link> 
</div>

路由配置(注意name在第二种方式中有用的):

{
    path:'/studyRoute/:id/:name', //params方式
    name:'studyRoute',
    components:{default:studyRoute}
}

StudyRoute.vue:


<template>
    <div>
            
            query-------<br>
            id:{{$route.query.id}}
            <br>
            name:{{$route.query.name}}
            
    </div>

    <div>
            params-------<br>
            id:{{$route.params.id}}
            <br>
            name:{{$route.params.name}}
    </div> 
</template>

<script setup lang="ts" name="">
</script>

<style lang='scss' scoped>
</style>

运行结果:
在这里插入图片描述
另一种写法:


<div style="font-size:80px; color:black; position:fixed;box-shadow: 0px 0px 0px #ccc; left:50%;top:80%; " >
    <router-link :to=
    "{
        name:'studyRoute',//注意此处只能用name不能用path
        params:{
            id:'12345',
            name:'shanhua'
        }
    }">
        to studyRoute
    </router-link> 
</div>

3.props传参

其实这种方式就是让params更加方便的形式,我们在实战中体会。

router-link中的内容不变,还用params方式:

 <div style="font-size:80px; color:black; position:fixed;box-shadow: 0px 0px 0px #ccc; left:50%;top:80%; " >
                <router-link :to=
                "{
                    name:'studyRoute',
                    params:{
                        id:'12345',
                        name:'shanhua'
                    }
                }">
                    to studyRoute
                </router-link> 
            </div>

为了对比,在组件中三种方式都留着,Route.vue:

<template>
    <div>
            
            query-------<br>
            id:{{$route.query.id}}
            <br>
            name:{{$route.query.name}} 
    </div>

    <div>
            params-------<br>
            id:{{$route.params.id}}
            <br>
            name:{{$route.params.name}}
    </div> 

    <div>
            props-------<br>
            id:{{id}}
            <br>
            name:{{name}}
    </div> 
</template>

<script setup lang="ts" name="">

    defineProps(['id','name'])
</script>

<style lang='scss' scoped>
</style>

路由配置:

 {
            path:'/studyRoute/:id/:name', //props方式
            name:'studyRoute',
            props:true,
            components:{default:studyRoute}
        }

注意增加了个属性props,这个的作用其实就类似在组件中增加了props:

<Route id=':id' name=':name'></Route>

这样,params参数就像props一样传递给了子组件,vue3的写法就可以接收props:


defineProps(['id','name'])

运行结果:
在这里插入图片描述
props同时也是兼容params的。


总结

路由传参是 vue-router 的核心功能之一,掌握它对于开发复杂的单页应用至关重要。在实际应用中,根据不同的场景选择合适的传参方式,可以使代码更加清晰和易于维护。

人生苦短,若虚度年华,则短暂的人生就太长了。

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

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

相关文章

计网面试干货---带你梳理常考的面试题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、HTTP和HTTPS的区别 1.安全性&#xff1a;HTTPS通过SSL/TLS协议对数据进行加密处理&#xff0c;有效防止数据在传输过…

【考研数学】准备开强化,更「张宇」还是「武忠祥」?

数一125学长前来回答&#xff0c;选择哪位老师的课程&#xff0c;这通常取决于你的个人偏好和学习风格&#xff01; 张宇老师和武忠祥老师都是非常有经验的数学老师&#xff0c;他们的教学方法各有特点。 张宇老师的教学风格通常被认为是通俗易懂&#xff0c;善于将复杂的概念…

数据结构------二叉树经典习题1

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1判断相同的树 OJ链接 这道题相对简单,运用我们常规的递归写法就能轻松写出 所以我们解题思路应该这样想: 1.如果p为空&#xff0c;q为空&#xff0c;那么就是两颗空树肯定相等 2.如果一个树为空另一棵树不为空那么…

计算机Java项目|Springboot高校心理教育辅导设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

论文阅读:基于改进 YOLOv5算法的密集动态目标检测方法

目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址&#xff1a;基于改进YOLOv5算法的密集动态目标检测方法 - 中国知网 (cnki.net) 概要 目的&#xff1a;提出一种基于 YOLOv5改进的检测算法&#xff0c;解决密集动态目标检测精度低及易漏检的问题。 方法&…

利用远程控制软件FinalShell远程连接虚拟机上的Linux系统(Windows)

一. VMware Workstation 安装CentOS Linux操作系统 传送门&#xff1a;VMware Workstation 安装CentOS Linux操作系统 1.右键打开终端 2.输入ifconfig 找到ens33对应 inet的id&#xff0c;这个就是虚拟机的ip地址图中所示为&#xff1a;192.168.5.128 3.打开finalshell 如…

「AIGC」Python实现tokens算法

本文主要介绍通过python实现tokens统计,避免重复调用openai等官方api,开源节流。 一、设计思路 初始化tokenizer使用tokenizer将文本转换为tokens计算token的数量二、业务场景 2.1 首次加载依赖 2.2 执行业务逻辑 三、核心代码 from transformers import AutoTokenizer imp…

【RSGIS数据资源】2001-2021 年亚洲季风区主要国家作物种植制度数据集

文章目录 1. 数据集概况2. 数据格式3. 文件名命名规则4. 数据生产服务单位5. 元数据6. 数据引用与参考文献引用 1. 数据集概况 2001-2021 年亚洲季风区主要国家作物种植制度数据集&#xff08;ACIA500&#xff09;是结合MODIS 影像和现有的土地利用等多源数据&#xff0c;基于…

数据结构——直接插入排序

基本思想 再插入第i个元素时&#xff0c;前面i-1个已经排好序。 排序过程 初始状态&#xff08;假设第一个元素为有序&#xff0c;其余均为无序元素&#xff09; 问题一&#xff1a;如何构建初始的有序序列&#xff1f; 办法 将第一个记录看成是初始有序表&#xff0c;然后…

万字长文破解 AI 图片生成算法-Stable diffusion (第一篇)

想象一下&#xff1a;你闭上眼睛&#xff0c;脑海中构思一个场景&#xff0c;用简短的语言描述出来&#xff0c;然后“啪”的一声&#xff0c;一张栩栩如生的图片就出现在你眼前。这不再是科幻小说里才有的情节&#xff0c;而是Stable Diffusion——一种前沿的AI图片生成算法—…

有多少小于当前数字的数字

链接&#xff1a;https://leetcode.cn/problems/how-many-numbers-are-smaller-than-the-current-number/description/ 思路&#xff1a; 最简单的思路来说&#xff0c;就是双重for循环进行遍历&#xff0c;来判断个数&#xff0c; 优化思路&#xff0c;其中一个思路就是递推 …

首次曝光!我喂了半年主食冻干,喵状态真滴顶~

科学养猫理念的推广&#xff0c;使得主食冻干喂养越来越受到养猫者的欢迎。主食冻干不仅符合猫咪的自然饮食习惯&#xff0c;还能提供丰富的营养&#xff0c;有助于保持猫咪的口腔和消化系统健康。我家喂了半年主食冻干&#xff0c;猫咪的状态是真的不一样了&#xff01; 然而…

轻松玩转2.5GHz 12nm双核CPU实战—Black Box

在2.5GHz 12nm A72双核CPU项目物理设计中&#xff0c;BlackBox 类似于一个 Hard Macro&#xff0c;它内部的东西完全看不见&#xff0c;只是一个黑盒子&#xff0c;但是它又类似于一个 Module Boundary。它可以被改变形状&#xff0c;而且它可以被分配 pin 和被分割出去&#x…

C++自定义头文件使用(函数和类)

简单案例需求&#xff1a; 1&#xff0c;计算正方形和三角形的周长——函数 2&#xff0c;模拟不同类型的动物叫声——类 一、创建项目 C空项目 Class_Study 二、创建主函数 在源文件下添加新建项&#xff0c;main.cpp 三、自定义头文件——函数 需求&#xff1a;1&a…

K210开发板MicroPython开发环境搭建

一、安装CanMV IDE开发软件 1、进入如下连接 https://developer.canaan-creative.com/resource 2、点击下载 3、下一步 4、修改安装路径&#xff0c;下一步 5、接受许可下一步 6、下一步 7、安装 8、完成 9、区域①菜单栏&#xff1a;操作文件&#xff0c;使用工具等。…

【Python大数据】PySpark

CSDN不支持多个资源绑定&#xff0c;另外两个数据文件下载&#xff1a; 订单数据-json.zip search-log.zip Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服…

Unity射击游戏开发教程:(13)如何在Unity中播放音效

在本文中,我将向大家展示一些为游戏添加声音的不同方法。 我们为游戏添加声音的第一种方法是播放背景音乐。在此,我们将创建游戏对象(“音频管理器”)并创建一个子游戏对象(“背景音乐”)。该子游戏对象将是播放音乐的对象,因此需要向其添加音频源组件。如果没有音频源组…

山东大学计算机考研数据分析,初复试占比6:4,复试内容不少得花精力准备!

山东大学&#xff08;ShandongUniversity&#xff09;&#xff0c;简称山大&#xff0c;位于中国山东&#xff0c;是中华人民共和国教育部直属的综合性全国重点大学&#xff0c;是国家“211工程”、“985工程”重点建设院校&#xff0c;入选“111计划”、“珠峰计划”、“卓越工…

【软考】模拟考卷错题本2024-05-14

1 活动图-计算时间差 审题&#xff0c;第几天~选的3、10是结束了上一次的活动并未开始呢 &#xff01;所以记得按照正常的语序表达哦&#xff01; 2 队列-算长度 代入法&#xff0c;设计一个开始为0&#xff0c;结尾为9 &#xff0c;容量为10即M的队列&#xff1b;带入计算当前…

国际化日期(inti)

我们可以使用国际化API自动的格式化数字或者日期&#xff0c;并且格式化日期或数字的时候是按照各个国家的习惯来进行格式化的&#xff0c;非常的简单&#xff1b; const now new Date(); labelDate.textContent new Intl.DateTimeFormat(zh-CN).format(now);比如说这是按照…