【Vue3】路由Query传参

news2024/12/26 11:22:32

【Vue3】路由Query传参

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

背景

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

简介

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

Query 参数是通过 URL 传递的数据,即 URL 中问号(?)后面的键值对,通常用于传递较小的数据,如搜索关键字、过滤条件等。

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

开发环境

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

开发步骤及源码

1> 在 【Vue3】命名路由 基础上新增一个页面组件 WarnDetail 用于接收路由传递的 Query 参数。

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

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

const route = 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>

2> 修改 src/router/index.ts,在 /system/warn 下增加一级子路由配置,指向新增的页面组件 WarnDetail

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: 'WarnDetail',
                            path: 'detail',
                            component: WarnDetail
                        }
                    ]
                }
            ]
        },
        {
            path: '/about',
            component: About
        }
    ]
})

export default router

3> 修改 src/pages/Warn.vue,使用模板字符串传递 Query 参数。

<template>
    <div class="warn">
        <div class="timeline">
            <h3>告警发生时间</h3>
            <ul>
                <li v-for="warn in warns" :key="warn.id">
                    <RouterLink :to="`/system/warn/detail?time=${warn.time}&msg=${warn.msg}&level=${warn.level}`">
                        {{ 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>

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

5> 修改 src/pages/Warn.vue,改为使用对象传递 Query 参数。

<template>
    <div class="warn">
        <div class="timeline">
            <h3>告警发生时间</h3>
            <ul>
                <li v-for="warn in warns" :key="warn.id">
                    <RouterLink 
                        :to="{
                            path: '/system/warn/detail',
                            query: {
                                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>

6> 浏览器刷新访问:http://localhost:5173/,路由传参效果与之前一致。

7> 修改 src/pages/WarnDetail.vue,通过解构优化参数接收。

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

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

const { query } = 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>

总结

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

  • 传参组件可以使用 模板字符串对象 两种方式传递 Query 参数,其中 对象 传参方式代码可读性更好;
  • 接收参数的组件调用 vue-router 组件的 useRoute() 方法接收路由对象,其中的 query 属性即路由传递的 Query 参数。

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

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

相关文章

24/8/17算法笔记 策略梯度reinforce算法

import gym from matplotlib import pyplot as plt %matplotlib inline#创建环境 env gym.make(CartPole-v0) env.reset()#打印游戏 def show():plt.imshow(env.render(mode rgb_array))plt.show() show()定义网络模型 import torch #定义模型 model torch.nn.Sequential(t…

8月17日星期六今日早报简报微语报早读

8月17日星期六&#xff0c;农历七月十四&#xff0c;早报微语早读。 1、海关总署&#xff1a;接触过猴痘病例的人员入境时应主动申报&#xff1b; 2、284名运动员出征&#xff01;巴黎残奥会中国体育代表团成立&#xff1b; 3、四部门&#xff1a;继续执行对彩票一次中奖不超…

C语言 之 字符相关函数

文章目录 字符分类函数字符转换函数 本章内容主要讲的是c语言中的字符相关的一些函数的作用用法和使用 为了方便我们对字符的各种操作&#xff0c;C语⾔标准库中提供了⼀系列库函数&#xff0c;我们大概可以根据其功能分成两类函数 字符分类函数 C语言中有一系列函数是专门用…

【区块链+金融服务】基于 VoneBaaS 的区块链金融服务管理平台 | FISCO BCOS应用案例

在顺应数字经济发展、强化科技赋能金融的背景下&#xff0c;中央及地方政策层面鼓励“区块链 金融”应用示范项目&#xff0c; 在中小企业征信及风险管理、供应链金融等重点领域开展应用&#xff0c;探索建立区块链金融风险监控体系。同时&#xff0c;随着 科技金融服务逐步升…

学生阅读行为与图书预定平台的设计与实现(全网独一无二,24年最新定做)

目录&#xff1a; 前言&#xff1a; 具体功能如下&#xff1a; 1. 学生角色 2. 图书管理员 3. 图书采购人员 4. 系统管理员 技术栈介绍&#xff1a; 1. Springboot 2. MySQL 3. Vue 4. Java 系统详细界面&#xff1a; 为什么选择我&#xff1a; 前言&#xff1a; 博…

71、docker网络

一、docker网络&#xff1a; 1.1、默认模式&#xff1a; 桥接模式 部署好docker服务&#xff0c;启动之后&#xff0c;就会创建一个虚拟网桥&#xff0c;docker0&#xff0c;这是一个虚拟网络设备&#xff0c;类似于交换机。 [rootdocker1 ~]# ifconfig docker0: flags4163…

Linux:Linux环境基础开发工具使用

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. Linux 软件包管理器 yum 1.1 什么是软件包 1.2 查看软件包 1.3 如何安装软件 1.4 如何卸载软件 二 Linux编辑器-vim使用 ​编辑 2.1 vim的基本概念 2.2 vim正常模式命令集…

安装postgresql和PGVector

1. 概述 研发有需要&#xff0c;要使用PGVector做向量。简单记录安装postgresql和PGVector过程。 2. 参考 postgresql官方下载连接 postgresql官方linux yum安装 PostgreSQL的安装、配置与使用指南 PostgreSQL向量数据插件–pgvector安装 3. 安装 3.1 只安装postgresql&am…

进程地址空间(一)

目录 1. 语言层面上的地址2. 引入新概念 ---- 地址空间的概念3. 进一步理解地址空间4. 为什么要有地址空间 在正式介绍进程地址空间之前&#xff0c;我们需要做一些铺垫&#xff0c;在父子进程同时运行时&#xff0c;从代码层面上的变量的地址&#xff0c;引入进程地址空间的概…

2.1算法的时间复杂度与空间复杂度

本篇博客介绍算法的时间复杂度与空间复杂度 一、算法效率 算法好坏从时间和空间两个维度衡量 二、时间复杂度 1&#xff0e;概念 时间复杂度是算法中基本操作的执行次数&#xff0c;定量描述了算法的运行时间 2&#xff0e;注意 &#xff08;1&#xff09;时间复杂度是偏…

vue项目中引入字体文件样式

需求:关于一些样式需要自定义的,所以需要ui提供字体文件,然后引入项目中,就可实现自定义 首先看一下实现效果图: 第一步:新建一个字体样式文件用于放字体文件和css样式 font.css文件: /* 数字特殊字体 */ font-face {/*给字体命名*/font-family: DINCondBold;/*引入字体文件*…

课堂助手小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;专业信息管理&#xff0c;部门信息管理&#xff0c;课程信息管理&#xff0c;教学内容管理&#xff0c;学生作业管理&#xff0c;系统管理 微信端账号功能包…

防止内存泄漏的神兵利器 — 智能指针

1.内存泄漏 1.1什么是内存泄漏 当我们在写C/C程序的时候&#xff0c;难免会出现内存泄漏的错误&#xff0c;因为C/C不像Java语言那样&#xff0c;拥有自己的垃圾回收机制&#xff0c;C/C中对于资源的管理&#xff0c;完全交给程序员自己打理&#xff0c;也就是说使用C/C的程序…

Ubuntu下NFS和SSH服务

本篇文章记录Ubuntu下如何对NFS和SSH服务进行配置和开启。 目录 一、NFS服务 二、SSH服务 1、安装SSH服务 2. 启动和检查SSH服务 3. 配置SSH服务 4. 连接到SSH服务 5. 设置防火墙 6. 测试连接 三、结语 一、NFS服务 NFS&#xff08;Network File System&#xff0…

设计模式(2)行为型模式和七大原则

1、目标 本文的主要目标是学习设计模式的行为型模式并举例说明 2、行为型模式 2.1 观察者模式&#xff08;Observer&#xff09; 观察者模式是对象之间存在一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;所有依赖它的对象都会得到通知并自动更新&…

京东数据编织

计算引擎是Hbase 中间计算结果的物化【就是存下来】 自动物化 在这里插入图片描述

设计模式在芯片验证中的应用——状态

一、状态模式 状态模式是一种行为设计模式&#xff0c; 让你能在一个对象的内部状态变化时改变其行为&#xff0c; 使其看上去就像改变了自身所属的类一样。 在RTL中可能存在复杂的有限状态机FSM&#xff0c;在任何一个特定状态中&#xff0c; RTL的行为都不相同&#xff0c;…

pip install 遇到ValueError: check_hostname requires server_hostname的解决办法

我需要下载Cython来将py编译成c&#xff0c;结果在pip install的时候报错这个&#xff1a; ERROR: Exception: Traceback (most recent call last):File "F:\Anaconda3\envs\DouyinLive32\lib\site-packages\pip\_internal\cli\base_command.py", line 173, in _mai…

《人类群星闪耀时》

人类群星闪耀时&#xff0c;历史的舞台上&#xff0c;你未尝不是其中一颗。 【拜占庭的沦陷】具备决断力、创新力、执行力的领导者起到关键作用。 【享德尔的复活】人的心力一旦强大&#xff0c;便可创造非凡之事。 【一夜天才】闪耀的星离不开黑夜的衬托。所谓的英雄&#x…

HarmonyOS Developer之生成二维码

qrcode 生成并显示二维码 属性 样式 创建qrcode组件 在pages/index目录下的hml文件中创建一个qrcode组件 HTML <!-- xxx.hml--> <div class"container"><qrcode value"Hello"></qrcode> </div>CSS /* xxx.css */ .cont…