在vue3+ts项目里使用query和params传参

在Vue 3 + TypeScript项目中,您可以使用queryparams来传递参数。以下是如何在Vue 3 + TypeScript中使用这两种方式进行参数传递的示例:

// 路由配置
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';const routes: Array<RouteRecordRaw> = [{path: '/example',name: 'Example',component: ExampleComponent,props: (route) => ({queryParam: route.query.queryParam, // 使用query传递参数routeParam: route.params.routeParam // 使用params传递参数})}
];const router = createRouter({history: createWebHistory(),routes
});export default router;
<!-- ExampleComponent.vue -->
<template><div><h1>Example Component</h1><p>Query Parameter: {{ queryParam }}</p><p>Route Parameter: {{ routeParam }}</p></div>
</template><script lang="ts">
import { defineComponent } from 'vue';export default defineComponent({props: {queryParam: {type: String,required: true},routeParam: {type: String,required: true}}
});
</script>

在上面的示例中,我们定义了一个名为Example的路由,它对应的组件是ExampleComponent。在路由配置中,我们使用props字段来传递参数。

对于query参数,我们可以使用route.query.queryParam来获取传递的参数。在组件中,我们使用props选项来定义queryParam属性,并指定它的类型为String,并将其设置为必需的。

对于params参数,我们可以使用route.params.routeParam来获取传递的参数。在组件中,我们使用props选项来定义routeParam属性,并指定它的类型为String,并将其设置为必需的。

这样,您就可以在Vue 3 + TypeScript项目中使用queryparams来传递参数了。

两者对比

在Vue Router中,queryparams是两种不同的方式来传递参数。它们有以下区别和对比:

  1. URL中的位置query参数出现在URL的查询字符串中,以?开头,后面是key=value对的形式,多个参数之间使用&分隔。例如:/example?param1=value1&param2=value2。而params参数出现在URL的路径中,以/分隔,例如:/example/param1/param2

  2. 传递方式query参数是通过URL进行传递的,可以直接在URL中进行编辑和查看。而params参数是通过路由配置中的path字段进行定义和匹配的。

  3. 用途query参数通常用于传递可选参数,例如搜索关键字、分页信息等。它们对于URL的解析和构造非常方便,也可以直接在浏览器地址栏中进行编辑。而params参数通常用于传递必需的参数,例如资源的ID或者唯一标识符等。

  4. 传递方式query参数可以通过$route.query来获取,也可以在路由链接中使用to.query来传递。而params参数可以通过$route.params来获取,也可以在路由链接中使用to.params来传递。

  5. 类型检查:在Vue 3中,您可以使用TypeScript来对queryparams进行类型检查。对于query参数,您可以使用route.query来获取参数,并将其类型定义为Record<string, string>。对于params参数,您可以使用route.params来获取参数,并将其类型定义为具体的参数类型。

总的来说,queryparams是两种不同的参数传递方式,适用于不同的场景和需求。您可以根据具体的需求选择使用哪种方式来传递参数。

场景

queryparams在Vue Router中都有各自的使用场景和优缺点。下面是它们的详细说明:

query的使用场景和优缺点:

  • 使用场景

    • 传递可选参数:query参数通常用于传递可选参数,例如搜索关键字、分页信息等。它们可以在URL中直接编辑和查看,非常方便。
    • 多个参数传递:query参数可以同时传递多个参数,通过key=value对的形式,多个参数之间使用&分隔。
  • 优点

    • 方便解析和构造URL:query参数对于URL的解析和构造非常方便,可以直接在浏览器地址栏中进行编辑。
    • 可选参数传递:query参数可以传递可选参数,不会影响路由的匹配和导航。
  • 缺点

    • 不适合传递必需参数:query参数不适合传递必需的参数,因为它们可以被用户直接编辑和删除,可能导致参数丢失或错误。

params的使用场景和优缺点:

  • 使用场景

    • 传递必需参数:params参数通常用于传递必需的参数,例如资源的ID或者唯一标识符等。
    • 简洁的URL路径:params参数出现在URL的路径中,可以使URL路径更加简洁和有意义。
  • 优点

    • 参数类型检查:在Vue 3中,您可以使用TypeScript来对params进行类型检查,确保传递的参数类型正确。
    • 简洁的URL路径:params参数出现在URL的路径中,可以使URL路径更加简洁和有意义。
  • 缺点

    • 不适合传递多个参数:params参数通常用于传递单个参数,不适合同时传递多个参数。
    • 不方便解析和构造URL:相比于query参数,params参数对于URL的解析和构造相对麻烦,需要在路由配置中进行定义和匹配。

综上所述,queryparams在不同的场景和需求下有各自的优缺点。您可以根据具体的需求选择使用哪种方式来传递参数

封装

在Vue Router中,您可以通过自定义函数或者插件来封装queryparams的传值方式,以便于在应用中更方便地使用。

以下是两种封装方式的示例:

1. 自定义函数封装:

您可以创建一个自定义的函数,用于处理queryparams的传值方式。例如,您可以创建一个名为setRouteQuery的函数,用于设置query参数:

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'const setRouteQuery = (key, value) => {const query = { ...router.currentRoute.value.query }query[key] = valuerouter.push({ query })
}const app = createApp(App)
app.config.globalProperties.$setRouteQuery = setRouteQuery
app.use(router)
app.mount('#app')

然后,在您的组件中就可以直接使用$setRouteQuery函数来设置query参数:

<template><button @click="setSearch('keyword')">Search</button>
</template><script>
export default {methods: {setSearch(keyword) {this.$setRouteQuery('search', keyword)}}
}
</script>

2. 插件封装:

您也可以创建一个插件,以便在整个应用中使用queryparams的传值方式。例如,您可以创建一个名为routeParams的插件:

// routeParams.js
export default {install(app) {app.config.globalProperties.$setRouteQuery = (key, value) => {const query = { ...app.config.globalProperties.$route.query }query[key] = valueapp.config.globalProperties.$router.push({ query })}app.config.globalProperties.$setRouteParams = (key, value) => {const params = { ...app.config.globalProperties.$route.params }params[key] = valueapp.config.globalProperties.$router.push({ params })}}
}

然后,在main.js中使用插件:

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import routeParams from './routeParams'const app = createApp(App)
app.use(router)
app.use(routeParams)
app.mount('#app')

现在,您就可以在整个应用中使用$setRouteQuery$setRouteParams来设置queryparams参数了:

<template><button @click="setSearch('keyword')">Search</button><button @click="setProduct(123)">View Product</button>
</template><script>
export default {methods: {setSearch(keyword) {this.$setRouteQuery('search', keyword)},setProduct(id) {this.$setRouteParams('id', id)}}
}
</script>

通过自定义函数或者插件的封装,您可以更方便地使用queryparams的传值方式,并在整个应用中复用这些封装的函数。

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

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

相关文章

万宾科技22款产品入选《城市生命线安全工程监测技术产品名录》

2023年8月17日-18日&#xff0c;由北京市地下管线协会主办的2023首届城市生命线安全与发展大会在北京召开&#xff0c;本次大会汇聚中央及地方政府主管领导、院士专家、行业领袖、龙头代表、产业精英等。 大会聚焦安全监管智慧平台和燃气爆炸、城市内涝、地下管线交互风险、第三…

解决Spring mvc + JDK17@Resource无法使用的情况

问题描述 我在使用jdk17进行Spring mvc开发时发现 Resource用不了了。 原因 因为JDK版本升级的改动&#xff0c;在Jdk9~17环境下&#xff0c;搭建Springboot项目&#xff0c;会出现原有Resource&#xff08;javax.annotation.Resource&#xff09;不存在的问题&#xff0c;导…

3.Docker 搭建 MySQL8.0

1、docker仓库搜索mysql docker search mysql2、docker仓库拉取mysql8.0 docker pull mysql:8.0 备注&#xff1a; docker pull mysql //默认拉取最新版本3、查看本地仓库镜像是否下载成功 docker images mysql:8.04、安装运行mysql8.0容器 docker run -p 3306:3306 --name…

全流程R语言Meta分析核心技术

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

政务、商务数据资源有效共享:让数据上“链”,记录每一个存储过程!

数据上链是目前“区块链”最常见的场景。因为链上所有参与方都分享了统一的事实来源&#xff0c;所有人都可以即时获得最新的信息&#xff0c;数据可用不可见。因此&#xff0c;不同参与方之间的协作效率得以大幅提高。同时&#xff0c;因为区块链上的数据难以篡改&#xff0c;…

dnslog调用脚本

import requests import time #获取dnslog子域名实时刷新记录 # 第一次请求获取子域名和Cookie get_domain_url "http://www.dnslog.cn/getdomain.php?t0.13027256482632943" headers { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; …

香蕉派社区推出带10G SFP+ 端口的Banana Pi BPI-R4 Wifi7开源路由器

香蕉派BPI-R4 根据著名Banana Pi品牌背后的公司Sinovoip提供的初步信息&#xff0c;他们即将推出的Banana Pi BPI-R4路由器板目前正在开发中。与之前的 Banana Pi R3 板相比&#xff0c;这在规格上将有显着提升。这就是我们目前所知道的。 您可以选择 R4 板的两种不同配置。具…

Docker部署LNMP

Docker部署LNMP 一、安装docker1.安装docker2.镜像下载 二、部署MySQL1.获取镜像2.创建启动容器创建启动容器 huahua_mysql 三、部署PHP1.获取镜像2.创建容器3.查看信息 四、安装nginx1.获取镜像2.创建运行容器3.修改nginx配置文件 五、总结1. 安装Docker和Docker Compose&…

实战演练 | Navicat 导出向导

数据库工具中的导入导出功能是指将数据从一个数据库系统导出到另一个数据库系统&#xff0c;或者将数据从一个文件格式导出到另一个文件格式。导入导出功能可以通过各种方式实现&#xff0c;例如使用SQL语句、数据库管理工具或第三方库和工具。在进行数据迁移时&#xff0c;通常…

(1)、扩展SpringCache一站式解决缓存击穿,穿透,雪崩

1、问题描述 我们在使用SpringCache的@Cacheable注解时,发现并没有设置过期时间这个功能。 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @I

如何关闭“若要接收后续google chrome更新,您需使用windows10或更高版本”

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Policies\Google\Chrome] "SuppressUnsupportedOSWarning"dword:00000001 如何关闭“若要接收后续 google chrome 更新,您需使用 windows 10 或更高版本” - 知乎

【FAQ】安防监控视频云存储平台EasyNVR频繁离线的原因排查与解决

有用户反馈&#xff0c;在使用EasyNVR时会出现通道频繁离线的情况。针对该反馈我们立即进行了排查。 安防视频监控汇聚EasyNVR视频集中存储平台&#xff0c;是基于RTSP/Onvif协议的安防视频平台&#xff0c;可支持将接入的视频流进行全平台、全终端分发&#xff0c;分发的视频流…

区块链与算力网络:创造未来网络的安全与共享

在数字革命的浪潮下&#xff0c;网络技术正焕发着前所未有的活力&#xff0c;而算力网络以其独特的区块链技术应用&#xff0c;为网络的安全性和资源共享带来了新的可能性。本文将带您深入探索算力网络中区块链技术的神奇应用&#xff0c;为您呈现这个充满活力和创新的网络未来…

国际阿里云腾讯云:阿里云服务器怎么打包

近年来&#xff0c;跟着云计算的发展&#xff0c;越来越多的人开始运用云服务器来保管自己的运用和网站。其间&#xff0c;阿里云服务器是国内最大的云计算服务供给商之一&#xff0c;能够供给高效安稳的服务器服务。可是&#xff0c;阿里云服务器的打包办法相较于其他云服务器…

华为数通方向HCIP-DataCom H12-821题库(单选题:01-20)

第01题 下面关于OSPF邻居关系和邻接关系描述正确的是 A、邻接关系由 OSPF的 DD 报文维护 B、OSPF 路由器在交换 Hello 报文之前必须建立邻接关系 C、邻居关系是从邻接关系中选出的为了交换路由信息而形成的关系 D、并非所有的邻居关系都可以成为邻接关系 答案&#xff1a;D 解析…

smiley-http-proxy-servlet 实现springboot 接口反向代理,站点代理,项目鉴权,安全的引入第三方项目服务

背景&#xff1a; 项目初期 和硬件集成&#xff0c;实现了些功能服务&#xff0c;由于是局域网环境&#xff0c;安全问题当时都可以最小化无视。随着对接的服务越来越多&#xff0c;部分功能上云&#xff0c;此时就需要有一种手段可以控制到其他项目/接口的访问权限。 无疑 反向…

HTML a标签

<a>标签定义一个超链接。它有如下主要属性&#xff1a; href&#xff1a;指定链接的地址&#xff0c;可以是一个URL、文件路径或锚点。target&#xff1a;指定链接在何处打开。其值包括&#xff1a; _blank&#xff1a;在新窗口或新标签页打开链接。_self&#xff1a;在…

Spring统一功能处理

1. AOP存在的问题 获取参数复杂AOP的规则相对简单 2. 拦截器 2.1. 应用(以登录为例) 2.1.1. 自定义拦截器 新建interceptor文件夹 import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http…

go_并发编程

go并发编程 一、 并发介绍1&#xff0c;进程和线程2&#xff0c;并发和并行3&#xff0c;协程和线程4&#xff0c;goroutine 二、 Goroutine1&#xff0c;使用goroutine1&#xff09;启动单个goroutine2&#xff09;启动多个goroutine 2&#xff0c;goroutine与线程3&#xff0…

sdk manager (ubuntu20.4) 安装

1、首先下载sdk manager 1.9.3 下载链接 https://www.baidu.com/link?urlVXJhUqxxhS3eFK3bOPTzi5LFl6ybeW3JwDY1CwANaPf1gvO3IxQKzY547NIe53x1blJxnAXg7FTRTvs-cnfnVa&wd&eqida22baa7b0004ca980000000664e2d426 当然要登录自己的账号才能成功下载&#xff0c;下载对应…