Vue3快速上手(十六)Vue3路由传参大全

news2024/11/18 11:43:10

在这里插入图片描述
Vue3路由传参

一、传参的多种方式

1.1 拼接方式

这种方式适合传递单个参数的情况,比如点击查看详情,传个id这样的场景

传参:

<RouterLink to="/person?id=1" active-class="active">person</RouterLink>
<!-- 一般是这样写,动态传参 -->
<RouterLink :to="`/person?id=${obj.id}`" active-class="active">person</RouterLink>

接参:

import { useRoute } from 'vue-router';

// 接收路由传参
let route = useRoute()
console.log('useRoute()-->', route);
console.log('接参:id = ', route.query.id);

在这里插入图片描述

1.2 对象方式

对象方式,适合一起传递多个参数,比较清晰明了,使用拼接方式虽然也能实现,但杂乱无章,不易维护,且容易出错。
传参:

<RouterLink :to="{
  path: '/person',
   query: {
     id: 1,
     name: '王大拿',
     age: 56
   }
 }" active-class="active">
   person
</RouterLink>

接参:

import { toRefs } from 'vue'
import { useRoute } from 'vue-router';

// 接收路由传参
let route = useRoute()
let {query} = toRefs(route)
console.log('接参:id = ', query.value.id);
console.log('接参:name = ', query.value.name);
console.log('接参:age = ', query.value.age);

在这里插入图片描述

1.3 params参数方式

params方式,需要在路由上设置需要传递参数的占位,如下:我在person后占位3个参数,且age为不必填项。id和name为必填项

// 创建1个路由器
const router = createRouter({
    // 路由器的工作模式
    history: createWebHistory(),
    /* 多个路由配置 */
    routes: [
        {
            name: 'ren',
            path: '/person/:id/:name/:age?',
            component: PersonVue
        }
    ]
});

也有2种方式,拼接路径方式、传递对象方式:

1.3.1 params拼接路径方式

传参:这里不传递age,因为上面设置age不是必传项

<RouterLink to="/person/1/王小拿" active-class="active">person</RouterLink>

接参:这里接params参数

import { toRefs } from 'vue'
import { useRoute } from 'vue-router';

// 接收路由传参
let route = useRoute()
console.log('route->', route);

let {params} = toRefs(route)
console.log('接参:id = ', params.value.id);
console.log('接参:name = ', params.value.name);
console.log('接参:age = ', params.value.age);

在这里插入图片描述

1.3.2 params传递对象方式

** ☆这里和1.2里不一致的是**:用的是name和params传递。1.2里用个是:path和query传递。
传参:

<RouterLink :to="{
      name: 'ren',
      params: {
        id: 1,
        name: '王大拿',
        age: 56
      }
}" active-class="active">
	person
</RouterLink>

接参:这里接params参数

import { toRefs } from 'vue'
import { useRoute } from 'vue-router';

// 接收路由传参
let route = useRoute()
console.log('route->', route);

let {params} = toRefs(route)
console.log('接参:id = ', params.value.id);
console.log('接参:name = ', params.value.name);
console.log('接参:age = ', params.value.age);

在这里插入图片描述

1.4 props方式

1.4.1 props方式1

基于1.3params方式传递参数,开启props为true。那么就可以通过defineProps(['id', 'name', 'age'])直接接收参数,并在页面上展示。

// 创建1个路由器
const router = createRouter({
    // 路由器的工作模式
    history: createWebHistory(),
    /* 多个路由配置 */
    routes: [
        {
            name: 'ren',
            path: '/person/:id/:name/:age?',
            component: PersonVue,
            props: true
        }
    ]
});

传参:

<RouterLink to="/person/1/王小拿" active-class="active">person</RouterLink>

接参:这里通过defineProps()接参数

<template>
    <div class="person">
        <h3>ID{{ id }}</h3>
        <h3>姓名:{{ name }}</h3>
        <h3>年龄:{{ age }}</h3>
    </div>
</template>

<script lang='ts' setup name="PersonCom">
defineProps(['id', 'name', 'age'])
</script>

在这里插入图片描述

1.4.2 props方式2

通过props(route){}函数的方式,传递参数。这种方式既支持params对象方式,也支持query对象的方式。

(一)params对象方式:
需要占位,返回route.params

// 创建1个路由器
const router = createRouter({
    // 路由器的工作模式
    history: createWebHistory(),
    /* 多个路由配置 */
    routes: [
        {
            name: 'ren',
            path: '/person/:id/:name/:age?',
            component: PersonVue,
            props(route){
                return route.params
            }
        }
    ]
});

传参:

<RouterLink :to="{
  name: 'ren',
  params: {
    id: 1,
    name: '王大拿',
    age: 56
  }
}" active-class="active">
  person
</RouterLink>

接参:这里通过defineProps()接参数

<template>
    <div class="person">
        <h3>ID{{ id }}</h3>
        <h3>姓名:{{ name }}</h3>
        <h3>年龄:{{ age }}</h3>
    </div>
</template>

<script lang='ts' setup name="PersonCom">
defineProps(['id', 'name', 'age'])
</script>

(二)query对象方式:
去掉占位,返回route.query

// 创建1个路由器
const router = createRouter({
    // 路由器的工作模式
    history: createWebHistory(),
    /* 多个路由配置 */
    routes: [
        {
            name: 'ren',
            path: '/person',
            component: PersonVue,
            props(route){
                return route.query
            }
        }
    ]
});

传参:

<RouterLink :to="{
    path: '/person',
    query: {
      id: 1,
      name: '王大拿',
      age: 56
    }
}" active-class="active">
  person
</RouterLink>

接参:这里通过defineProps()接参数

<template>
    <div class="person">
        <h3>ID{{ id }}</h3>
        <h3>姓名:{{ name }}</h3>
        <h3>年龄:{{ age }}</h3>
    </div>
</template>

<script lang='ts' setup name="PersonCom">
defineProps(['id', 'name', 'age'])
</script>

效果都是一样的,浏览器地址不同:params是路径方式;query是参数拼接方式。
在这里插入图片描述

END

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

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

相关文章

类与对象(一)

目录 1 什么是面向过程和面向对象 1.1举例 2类的引入 3类的定义 3.1类的两种定义方式&#xff1a; 4.类的访问限定符及封装 4.1访问限定符 4.1.1为什么要有访问限定符 4.1.2有哪些访问限定符呢&#xff1f; 4.1.3简单举例理解 4.1.4C中的class与struct的区别(面试问题…

使用pyannote-audio实现声纹分割聚类

使用pyannote-audio实现声纹分割聚类 # GitHub地址 https://github.com/MasonYyp/audio1 简单介绍 pyannote.audio是用Python编写的用于声纹分割聚类的开源工具包。在PyTorch机器学习基础上&#xff0c;不仅可以借助性能优越的预训练模型和管道实现声纹分割聚类&#xff0c;还…

图解Vivado工程的目录结构

一、目录结构 ​在使用Vivado进行工程设计时&#xff0c;创建工程以及运行工程的过程中都会生成大量的目录和文件&#xff0c;下面图将对目录和文件结构及功能进行一个简单说明。 工程示例图 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 二、参考资料…

windows下安装cnpm

cnpm是淘宝团队开发的一个针对中国用户的npm镜像源&#xff0c;它是npm的一个定制版本。由于国外的npm源在国内访问速度较慢&#xff0c;所以cnpm镜像源可以提供更快的下载速度。cnpm的使用方式与npm基本相同&#xff0c;只需将npm替换为cnpm即可。 要想使用cnpm等先安装node.…

面试准备:排序算法大汇总 C++

排序算法总结 直接插入排序 取出未排序部分的第一个元素&#xff0c;与已排序的部分从后往前比较&#xff0c;找到合适的位置。将大于它的已排序的元素向后移动&#xff0c;将该元素插入到合适的位置。 //1. 直接插入排序 void InsertionSort(vector<int>& nums){f…

如何确保JDK版本与操作系统架构匹配?

1. 序言 最近的工作中&#xff0c;需要升级JDK版本到17.0.7&#xff0c;以解决一个JDK bug&#xff1a;JDK-8299626该bug的core dump关键字如下&#xff1a;SIGSEGV in PhaseIdealLoop::build_loop_late_post_work公司JDK团队提供的、包含JDK的基础镜像&#xff0c;有aarch64和…

深入了解Java虚拟机(JVM)

Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心组件&#xff0c;它负责解释执行Java字节码&#xff0c;并在各种平台上执行。JVM的设计使得Java具有跨平台性&#xff0c;开发人员只需编写一次代码&#xff0c;就可以在任何支持Java的系统上运行。我们刚开始学习Ja…

Launch学习

参考博客&#xff1a; (1) 史上最全的launch的解析来啦&#xff0c;木有之一欧 1 ROS工作空间简介 2 元功能包 src目录下可以包含多个功能包&#xff0c;假设需要使用机器人导航模块&#xff0c;但是这个模块中包含着地图、定位、路径规划等不同的功能包&#xff0c;它们的逻…

【Python】1. 背景知识

认识 Python 计算机基础概念 什么是计算机? 很多老一辈的人, 管下面这个叫做计算机. 然鹅, 它只是 “计算器”, 和计算机是有很大区别的. 现在我们所说的计算机, 不光能进行算术运算, 还能进行逻辑判断, 数据存储, 网络通信等等功能,。 以至于可以自动的完成非常复杂的工作…

SLAM基础知识-卡尔曼滤波

前言&#xff1a; 在SLAM系统中&#xff0c;后端优化部分有两大流派。一派是基于马尔科夫性假设的滤波器方法&#xff0c;认为当前时刻的状态只与上一时刻的状态有关。另一派是非线性优化方法&#xff0c;认为当前时刻状态应该结合之前所有时刻的状态一起考虑。 卡尔曼滤波是…

java垃圾回收

垃圾回收 一个对象如果不再使用&#xff0c;需要手动释放&#xff0c;否则就会出现内存泄漏。我们称这种释放对象的过程为垃圾回收&#xff0c;而需要程序员编写代码进行回收的方式为手动回收。 内存泄漏指的是不再使用的对象在系统中未被回收&#xff0c;内存泄漏的积累可能…

LCR 124. 推理二叉树

解题思路&#xff1a; 分治 class Solution {// 一个哈希表用于存储中序遍历中每个值对应的索引&#xff0c;用于快速查找HashMap<Integer,Integer> map new HashMap<>();// 保存前序遍历的结果数组int[] preorder;// 主函数&#xff0c;传入前序和中序遍历的结果…

Vue中的计算属性和方法有什么区别?

Vue.js是一款流行的JavaScript前端框架&#xff0c;提供了丰富的功能和便捷的开发方式。在Vue中&#xff0c;计算属性和方法是常用的两种方式来处理数据和逻辑。但它们之间存在一些区别&#xff0c;本文将详细介绍Vue中计算属性和方法的区别&#xff0c;并通过示例代码加深理解…

UE4c++ ConvertActorsToStaticMesh ConvertProceduralMeshToStaticMesh

UE4c ConvertActorsToStaticMesh 创建Edior模块&#xff08;最好是放Editor模块毕竟是编辑器代码&#xff09;创建蓝图函数UBlueprintFunctionLibraryUTestFunctionLibrary.hUTestFunctionLibrary.cpp:.Build.cs 目标:为了大量生成模型&#xff0c;我们把虚幻带有的方法迁移成函…

一周学会Django5 Python Web开发-Django5详细视图DetailView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计28条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的停车位检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发停车位检测系统对于优化停车资源管理和提升用户体验至关重要。本篇博客详细介绍了如何利用深度学习构建一个停车位检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并结合了YOLOv7、YOLOv6、YOLOv5的性能对比&#xf…

python-分享篇-控制摄像头

文章目录 准备代码效果 准备 安装cv2 pip install opencv-python &#xff08;如果只用主模块&#xff0c;使用这个命令安装&#xff09; pip install opencv-contrib-python &#xff08;如果需要用主模块和contrib模块&#xff0c;使用这个命令安装&#xff09; 我的代码l里…

Vue+SpringBoot打造知识图谱构建系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 知识图谱模块2.2 知识点模块2.3 学生测评模块2.4 学生成绩模块 三、系统展示四、核心代码4.1 查询知识点4.2 新增知识点4.3 查询知识图谱4.4 查询学生成绩4.5 查询学生成绩 五、免责说明 一、摘要 1.1 项目介绍 基于J…

AJAX 学习笔记(Day3)

「写在前面」 本文为黑马程序员 AJAX 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. AJAX 学习笔记&#xff08;Day1&#xff09; 目录 3 AJAX 原理 3.1 XMLHttpRequest 3…

Stable Video文本生成视频公测地址——Scaling Latent Video Diffusion Models to Large Datasets

近期&#xff0c;Stability AI发布了首个开放视频模型——"Stable Video"&#xff0c;该创新工具能够将文本和图像输入转化为生动的场景&#xff0c;将概念转换成动态影像&#xff0c;生成出电影级别的作品&#xff0c;旨在满足广泛的视频应用需求&#xff0c;包括媒…