【Vue3】路由Params传参

news2024/11/13 18:23:20

【Vue3】路由Params传参

  • 背景
  • 简介
  • 开发环境
  • 开发步骤及源码
  • 总结

背景

随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。

简介

本文介绍 Vue3 中路由传递 Params 参数的方法。

Params 参数是通过 URL 路径的一部分传递的数据,通常用于标识资源的唯一性或层级关系,如 http://demo.net/user/1 中的 1 便是一个 Params 参数,通常表示系统用户 ID。Params 参数常用于 RESTful 风格 API 中。

Vue3 可以使用 模板字符串对象 传递 Params 参数。

开发环境

分类名称版本
操作系统WindowsWindows 11
IDEVisual Studio Code1.91.1

开发步骤及源码

1> 在 【Vue3】路由Query传参 基础上修改 src/router/index.ts,将 /system/warn/detail 路由配置由 Query 传参修改为 Params 传参。

import { createRouter, createWebHistory } from 'vue-router'
import Dashboard from '@/pages/Dashboard.vue'
import Log from '@/pages/Log.vue'
import Permission from '@/pages/Permission.vue'
import Warn from '@/pages/Warn.vue'
import System from '@/pages/System.vue'
import About from '@/pages/About.vue'
import WarnDetail from '@/pages/WarnDetail.vue'

const router = createRouter({
    // 路由器工作模式
    history: createWebHistory(),
    routes: [
        {
            path: '/dashboard',
            component: Dashboard
        },
        {
            path: '/system',
            component: System,
            children: [
                {
                    name: 'SystemPermission',
                    path: 'permission',
                    component: Permission
                },
                {
                    name: 'SystemLog',
                    path: 'log',
                    component: Log
                },
                {
                    name: 'SystemWarn',
                    path: 'warn',
                    component: Warn,
                    children: [
                        {
                            name: 'SystemWarnDetail',
                            path: 'detail/:time/:level/:msg',
                            component: WarnDetail
                        }
                    ]
                }
            ]
        },
        {
            path: '/about',
            component: About
        }
    ]
})

export default router

2> 修改 src/pages/Warn.vue,使用对象传递 Params 参数。

<template>
    <div class="warn">
        <div class="timeline">
            <h3>告警发生时间</h3>
            <ul>
                <li v-for="warn in warns" :key="warn.id">
                    <RouterLink 
                        :to="{
                            name: 'SystemWarnDetail',
                            params: {
                                time: warn.time,
                                level: warn.level,
                                msg: warn.msg
                            }
                        }"
                    >
                        {{ warn.time }}
                    </RouterLink>
                </li>
            </ul>
        </div>
        <div class="warn-detail">
            <RouterView />
        </div>
    </div>
</template>

<script setup lang="ts">
import { reactive } from 'vue'
import { RouterLink, RouterView } from 'vue-router'

const warns = reactive([
    { "id": 9, "time": "2024/08/16 19:45:35", "msg": "服务XX升级失败回退", "level": 1 },
    { "id": 8, "time": "2024/08/15 23:58:41", "msg": "服务XXCPU占用率超警戒值", "level": 2 },
    { "id": 7, "time": "2024/08/15 20:10:00", "msg": "缓存使用量超警戒值XX", "level": 2 },
    { "id": 6, "time": "2024/08/15 17:42:08", "msg": "服务XX无法恢复", "level": 1 },
    { "id": 5, "time": "2024/08/15 15:14:39", "msg": "服务XX异常重启", "level": 2 },
    { "id": 4, "time": "2024/08/13 01:05:17", "msg": "请求处理失败数超阈值XX", "level": 2 },
    { "id": 3, "time": "2024/08/12 22:31:26", "msg": "服务XX持续上报告警", "level": 4 },
    { "id": 2, "time": "2024/08/12 14:22:54", "msg": "消息队列积压XX", "level": 3 },
    { "id": 1, "time": "2024/08/10 10:01:01", "msg": "请求处理平均时延超警戒值XX", "level": 2 }
])
</script>

<style scoped lang="scss">
.warn {
    .timeline, .warn-detail {
        height: 420px;
        li {
            line-height: 35px;
        }
    }
    .timeline {
        border-right: 1px solid #aaa;
        width: 37%;
        float: left;
    }
    .warn-detail {
        width: 60%;
        float: right;
    }
}
</style>

3> 修改 src/pages/WarnDetail.vue 接收路由传递的 Params 参数。

<template>
    <div class="detail">
        <h3>告警详情</h3>
        <div>上报时间:{{ params.time }}</div>
        <div>
            告警级别:
            <span v-if="params.level == '1'" class="warn-level warn-level-1">一级</span>
            <span v-else-if="params.level == '2'" class="warn-level warn-level-2">二级</span>
            <span v-else-if="params.level == '3'" class="warn-level warn-level-3">三级</span>
            <span v-else-if="params.level == '4'" class="warn-level warn-level-4">四级</span>
        </div>
        <div>告警信息:{{ params.msg }}</div>
    </div>    
</template>

<script setup lang="ts">
import { toRefs } from 'vue';
import { useRoute } from 'vue-router'

const { params } = toRefs(useRoute())
</script>

<style scoped lang="scss">
.detail {
    padding: 0 10px;
    div {
        min-height: 30px;
        line-height: 30px;
        .warn-level-1 {
            color: red;
        }
        .warn-level-2 {
            color: orange;
        }
        .warn-level-3 {
            color: yellow;
        }
        .warn-level-4 {
            color: blue;
        }
    }
}
</style>

4> 执行命令 npm run dev 启动应用,浏览器访问:http://localhost:5173/,点击左侧菜单进入 系统管理 页面,点击顶部 告警 按钮进入告警页面,点击告警页面左侧 告警发生时间 查看右侧的 告警详情,已成功显示路由传递的 Params 参数。
在这里插入图片描述

5> 本示例不能使用 模板字符串 传参方式,因为传递的数据 warn.time 中包含 /,这会导致 URL 解析错误,出现如下提示。
在这里插入图片描述

因此 模板字符串 只适用于传递不含特定字符的简单数据,感兴趣的可将本示例中的 warn.time 从传递的数据中去掉后尝试使用 模板字符串

总结

Vue3 路由传递 Params 参数的注意点:

  • 传参组件可以使用 模板字符串对象 两种方式传递 Params 参数,其中 对象 传参方式代码可读性更好,且当传递的数据中包含 / 等字符时,使用 模板字符串 传递会遇到 URL 解析错误,所以建议统一使用 对象 传参方式;
  • 对象 传参必须使用命名路由,即 <RouterLink> 组件的 to 属性接收的对象参数必须使用 name 指定路由,不能使用 path 指定路由;
  • 接收参数的组件调用 vue-router 组件的 useRoute() 方法接收路由对象,其中的 params 属性即路由传递的 Params 参数。

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

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

相关文章

Vue2移动端(H5项目)项目基于vant封装图片上传组件(支持批量上传、单个上传、回显、删除、预览、最大上传数等功能)---解决批量上传问题

一、最终效果 二、参数配置 1、代码示例&#xff1a; <t-uploadfileList"fileList":showFileList"showFileList"showFile"showFile":showFileUrl"showFileUrl"/>2、配置参数&#xff08;TUpload Attributes&#xff09;继承va…

vulnhub系列:DC-1

vulnhub系列&#xff1a;DC-1 靶机下载 一、信息收集 nmap 扫描存活&#xff0c;根据 mac 地址寻找 IP nmap 192.168.23.0/24nmap 扫描端口 nmap 192.168.23.141 -p- -Pn -sV -Odirsearch 目录扫描 python3 dirsearch.py -u http://192.168.23.141/访问80端口 查看 wappa…

数据资产三次入表理论

数据资产三次入表理论 数据资产入表三大阶段详见图。 初次入表&#xff1a;底层资产入表 初次入表主要指的是企业将已实际形成的底层原始数据资源&#xff0c;按照《企业数据资源相关会计处理暂行规定》的要求&#xff0c;首次纳入会计层面的企业资产库。这一阶段工作的完成&am…

8.16 day bug

bug1 题目没看仔细 额外知识 在 Bash shell 中&#xff0c;! 符号用于历史扩展功能。当你在命令行中输入 ! 后跟一些文本时&#xff0c;Bash 会尝试从你的命令历史中查找与该文本相匹配的命令。这是一种快速重用之前执行过的命令的方法。 如何使用历史扩展 基本用法: !strin…

进程间通信—无名管道

gg shiftg快速对齐 加锁顺序问题时&#xff0c;如果解锁了&#xff0c;两个同时申请抢锁&#xff0c;谁抢到了运行谁&#xff0c;循环迭代时释放锁也是同时申请锁&#xff0c;循环部分如果没抢到锁就进入循环等待 总结: IPC 进程间通信 interprocess communicate //signal…

【阿卡迈防护分析】Vueling航空Akamai破盾实战

文章目录 1. 写在前面2. 风控分析3. 破盾实战 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

Elasticsearch新增和删除索引中的字段

在ES中&#xff0c;增加字段相对比较容易&#xff0c;因为ES支持动态映射&#xff08;Dynamic Mapping&#xff09;。 当索引中新增文档时&#xff0c;ES可以根据文档中的字段自动创建对应的映射关系。如果新字段类型与已有字段类型不同&#xff0c;ES会自动将已有字段类型转换…

2024-2025年最值得选的Java计算机毕业设计选题大全:800个热门选题

一、前言 博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ…

选择排序(附动图)

1.思路 基本思想&#xff1a; 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 1.1双向选择排序&#xff08;升序&#xff09; 头尾指针&#xff08;索引&#xf…

Excel求和方法之

一 SUM&#xff08;&#xff09;&#xff0c;选择要相加的数,回车即可 二 上面的方法还不够快。用下面这个 就成功了 三 还有一种一样快的 选中之后&#xff0c;按下Alt键和键&#xff08;即Alt&#xff09;

三种生成模型

三种生成模型&#xff08;GAN,VAE,FLOW&#xff09; 什么是生成模型&#xff1f; 图像、文本、语音等数据&#xff0c;都可以看做是从一个复杂分布中采样得到的。 一个简单的分布随机分布,经过一系列复杂的变换(Generator)之后变成复杂分布. 从简单分布中随机采样一个z,经过G后…

新版本源2.0大模型发布:Yuan2-2B-July-hf

​ 引言 近日&#xff0c;浪潮信息的新一代基础语言大模型源2.0 迎来了重要更新。浪潮信息正式发布了 Yuan2-2B-July-hf 模型&#xff0c;标志着源2.0系列模型在性能和功能上的进一步提升。这一版本将为开发者和研究人员提供更强大的工具&#xff0c;以满足各种语言处理需求。…

武汉流星汇聚:携手亚马逊,全球电商中破浪前行,跨境业务加速崛起

在全球电商的浩瀚星空中&#xff0c;亚马逊无疑是最耀眼的星辰之一&#xff0c;其无与伦比的市场规模、卓越的用户体验以及强大的品牌影响力&#xff0c;为全球卖家铺设了一条通往成功的康庄大道。而在这条道路上&#xff0c;武汉流星汇聚电子商务有限公司作为一颗迅速崛起的新…

libnl教程(1):订阅内核的netlink广播通知

文章目录 前言目标netlink kernel multicast notifications订阅内核的链路(link)变化通知示例代码函数使用难点问题 前言 我之前整理过&#xff1a;netlink 简介。 netlink 是 libnl 的基础。 在开始之前&#xff0c;需要先翻看一遍官方文档&#xff1a;Netlink Library (li…

centos从home分区分配空间到根分区

在安装centos系统时如果采用默认自动分区&#xff0c;则会默认只给根分区分配50G空间&#xff0c;其余多余的会被分配到home分区&#xff0c;而作为家用服务器或仅个人使用的话&#xff0c;为了方便往往根分区会不够用而home分区几乎没使用。 先看下现在的磁盘结构和容量(xfs文…

第八篇 WAV文件格式

WAVE PCM soundfile format WAV即WAVE&#xff0c;WAVE文件是计算机领域最常用的数字化声音文件格式之一&#xff0c;它是微软专门为Windows系统定义的波形文件格式&#xff08;Waveform Audio&#xff09;&#xff0c;其扩展名为"*.wav"。 最基本的WAVE文件…

【Linux】进程概念的铺垫

进程概念的铺垫 先谈硬件——冯诺依曼体系结构冯诺依曼体系结构的5大部件输入输出设备存储器中央处理器&#xff08;CPU&#xff09; 冯诺依曼体系结构示意图 再谈软件——操作系统操作系统的 目的 和 定位如何理解 "管理"总结系统调用 - system call 先谈硬件——冯…

LINUX原始机安装JDK

文章目录 下载 JDK压缩包创建jdk文件夹sftp 远程上传解压缩 tar -zxvf 包名配置环境变量刷新 环境变量验证是否安装成功安装JAVA 依赖yum更新及替换镜像curl 命令下载更新更新yum依赖判断repo文件是否存在生成缓存、启用阿里云镜像 重新下载java依赖再次验证hello world 下载 J…

Java | Leetcode Java题解之第341题扁平化嵌套列表迭代器

题目&#xff1a; 题解&#xff1a; public class NestedIterator implements Iterator<Integer> {private List<Integer> vals;private Iterator<Integer> cur;public NestedIterator(List<NestedInteger> nestedList) {vals new ArrayList<Inte…

用数据分析找到神奇公式-《股市稳赚》读后感

格林布拉特的这本书介绍了一种简单的方法&#xff0c;核心是用神奇公式寻找到高资本收益率和高股票收益率的最佳投资组合。作者对其背后原理的普遍性充满自信&#xff0c;神奇公式寻找经营良好且价格低于平均水平的公司&#xff0c;买进质优价低的公司&#xff0c;这个公式&…