位置: IT常识 - 正文

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

发布时间:2024-01-15
在vue3+ts项目里使用query和params传参 一 query 传参 (类似get请求)

推荐整理分享在vue3+ts项目里使用query和params传参(vue3加ts),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3 $attrs,vue3 $attrs,vue ts项目,vue3 ts知乎专栏,vue3 ts知乎专栏,vue在项目中怎么用的,vue3 + ts,vue3 ts知乎专栏,内容如对您有帮助,希望把文章链接给更多的朋友!

query 传参方式①

传递方组件

home.vue

<template><div class='c'> <p>query传参</p> <el-button type="success" @click="toList"> to list</el-button></div></template><script lang='ts' setup>import { ref } from 'vue'// 1 引入路由跳转方法useRouterimport { useRouter } from 'vue-router'// 2 拿到实例const router = useRouter()// 3 ref定义基本类型数据const name = ref('梨花白')// 4 query传参const toList = ()=>{ router.push({ //这种对象式传参写法 query除开和path搭配外还可以和name一起使用 path:'/list', //或者这样 path和name任选其一 //name:'List', query:{ name:name.value } })}</script><style scoped>.c{ width: 80%; padding: 20px; margin: 0 auto; border:1px solid red;}.c>p>span{ color:coral;}</style>

看下 router/index.ts 文件

import { createRouter,createWebHistory,RouteRecordRaw } from 'vue-router'const routes:Array<RouteRecordRaw> = [ { path:'/', component:()=>import('../pages/home.vue') },{ path:'/home', name:'Home',//路由命名 component:()=>import('../pages/home.vue') },{ path:'/list', name:'List',//路由命名 为路由跳转作准备 component:()=>import('../pages/list.vue') },{ //定义404页面 path:'/404', component:()=>import('../pages/notfound.vue') },{ //匹配未定义路由 然后重定向至404页面 path:'/:pathMath(.*)', redirect:'/404' }]const router = createRouter({ routes, history:createWebHistory()})export default router

有两个注意点

① ref定义响应式基本类型数据后,修改和赋值要带上 .value

② query是一个对象类型 所以我们定义的基本类型数据不能直接赋值 要给对象式写法 {}

像以下两种写法都是报错的

<script lang='ts' setup>import { ref } from 'vue'// 1 引入路由跳转方法useRouterimport { useRouter } from 'vue-router'// 2 拿到实例const router = useRouter()// 3 ref定义基本数据const name = ref('梨花白')// 4 query传参const toList = ()=>{ router.push({ path:'/list', query:name //报错 不能将类型“Ref<string>”分配给类型“LocationQueryRaw”。 //类型“Ref<string>”中缺少类型“string”的索引签名 })}</script><script lang='ts' setup>import { ref } from 'vue'// 1 引入路由跳转方法useRouterimport { useRouter } from 'vue-router'// 2 拿到实例const router = useRouter()// 3 ref定义基本数据const name = ref('梨花白')// 4 query传参const toList = ()=>{ router.push({ path:'/list', query:name.value //报错 不能将类型“string”分配给类型“LocationQueryRaw” })}</script>

接收方组件

list.vue

<template><div class='c'> <p>query接参</p> <!-- 4 展示数据 --> <p>name: <span>{{ name }}</span></p></div></template><script lang='ts' setup>// 1 引入useRoute路由信息方法import { useRoute } from 'vue-router'// 2 获取实例const route = useRoute()// 3 解构赋值const { query:{name} } = route</script><style scoped>.c{ width: 80%; padding: 20px; margin: 0 auto; border:1px solid red;}.c>P>span{ color:coral;}</style>

效果:

动态效果:

 以上 我们可以得知 当使用query传参时,参数的详细内容都会在地址栏完整的展示出来。

这对于数据安全来说是致命的

当然也有它自有的优势:刷新不会丢失数据

下面看看使用query传参的另一种形式:?传参

query 传参方式②

传递方组件

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

home.vue

<template><div class='c'> <p>query传参</p> <el-button type="success" @click="toList"> to list</el-button></div></template><script lang='ts' setup>import { toRefs,ref,reactive } from 'vue'// 1 引入路由跳转方法useRouterimport { useRouter } from 'vue-router'// 2 拿到实例const router = useRouter()// 3 ref定义基本数据const name = ref('桃花夭')// 4 query ?传参 const toList = ()=>{ router.push('/list?name=' + name.value) //也可以使用ES6里的模板字符串 //router.push(`/list?name=${name.value}`)}</script><style scoped>.c{ width: 80%; padding: 20px; margin: 0 auto; border:1px solid red;}.c>p>span{ color:coral;}</style>

效果:

 动态效果:

两者效果别无二致 也有同学说我在传入引用类型数据时老是报错 怎搞嘞

好的 下面开始传递引用类型数据

传递方组件

home.vue

<template><div class='c'> <p>query传参</p> <el-button type="success" @click="toList"> to list</el-button></div></template><script lang='ts' setup>import { ref,reactive } from 'vue'// 1 引入路由跳转方法useRouterimport { useRouter } from 'vue-router'// 2 拿到实例const router = useRouter()// 3 定义数据接口类型interface props { id:number, content:string}// 4 reactive定义引用类型数据const arr:props[] = reactive([ { id:1, content:'关山难越,谁悲失路之人?' },{ id:2, content:'萍水相逢,尽是他乡之客!' }])// 4 或这样// const arr = reactive([// {// id:1,// content:'关山难越,谁悲失路之人?'// },{// id:2,// content:'萍水相逢,尽是他乡之客!'// }// ] as props[])// 5 query ?传参 const toList = ()=>{ router.push('/list?arr=' + JSON.stringify(arr)) //也可以使用模板字符串 // router.push(`/list?arr=${JSON.stringify(arr)}`)}</script><style scoped>.c{ width: 80%; padding: 20px; margin: 0 auto; border:1px solid red;}.c>p>span{ color:coral;}</style>

接收方组件

list.vue

<template> <div class="c"> <p>query接参</p> <!-- 4 展示数据 --> <p v-for="item in arr" :key="item.id"> <span>{{ item.content }}</span> </p> </div></template><script lang="ts" setup>// 1 引入useRoute方法import { useRoute } from "vue-router";// 2 获取实例const route = useRoute();// 3 使用JSON.parse()方法把传过来的字符串参数转回对象const arr = JSON.parse(route.query.arr as string);</script><style scoped>.c { width: 80%; padding: 20px; margin: 0 auto; border: 1px solid red;}.c > P > span { color: coral;}</style>

效果:

动态效果:

所以是

在使用?传参传入引用类型数据时 传递时要使用JSON.stringify()方法转成字符串类型

在接收时 要使用JSON.parse()方法再转回最初的类型

易错点如下:

 query 传参方式③

其实也就是

本文链接地址:https://www.jiuchutong.com/zhishi/295959.html 转载请保留说明!

上一篇:深度学习环境配置(pytorch版本)----超级无敌详细版(有手就行)

下一篇:vuex中this.$store.commit和this.$store.dispatch的用法

  • qq安全中心怎么恢复被删除的好友(qq安全中心怎么没有我的足迹了)

    qq安全中心怎么恢复被删除的好友(qq安全中心怎么没有我的足迹了)

  • 多多果园50元券怎么获得(多多果园50元券不兑换)

    多多果园50元券怎么获得(多多果园50元券不兑换)

  • 小天才z6a怎么设置密码(小天才z6a怎么设置字体)

    小天才z6a怎么设置密码(小天才z6a怎么设置字体)

  • 网易云一起听歌一方是vip两个人都能听吗(网易云一起听歌怎么添加自己想听的歌曲)

    网易云一起听歌一方是vip两个人都能听吗(网易云一起听歌怎么添加自己想听的歌曲)

  • qq的星星月亮太阳代表什么意思(qq的星星月亮太阳怎么弄)

    qq的星星月亮太阳代表什么意思(qq的星星月亮太阳怎么弄)

  • word下划线怎么去掉(word下划线怎么设置)

    word下划线怎么去掉(word下划线怎么设置)

  • 什么是抖音金卡(抖音金卡哪个最难)

    什么是抖音金卡(抖音金卡哪个最难)

  • 微信以前的图片怎么恢复(微信以前的图片过期了怎么办)

    微信以前的图片怎么恢复(微信以前的图片过期了怎么办)

  • 切换幻灯片的快捷键(幻灯片如何快速切换)

    切换幻灯片的快捷键(幻灯片如何快速切换)

  • 6.7英寸的手机多大(6.7英寸的手机多大图片)

    6.7英寸的手机多大(6.7英寸的手机多大图片)

  • qq校园扩列匹配失败怎么回事(2020新版qq校园扩列在哪里)

    qq校园扩列匹配失败怎么回事(2020新版qq校园扩列在哪里)

  • 主页抖音号可以隐藏吗(抖音号可以切换账号吗)

    主页抖音号可以隐藏吗(抖音号可以切换账号吗)

  • 抖音为什么突然就没有流量了(抖音为什么突然要求实名认证)

    抖音为什么突然就没有流量了(抖音为什么突然要求实名认证)

  • 电脑背景变成黑色的了是为什么(电脑背景变成黑色了如何调回正常)

    电脑背景变成黑色的了是为什么(电脑背景变成黑色了如何调回正常)

  • 苹果5更新不了系统怎么办(苹果5更新不了微信)

    苹果5更新不了系统怎么办(苹果5更新不了微信)

  • 淘宝淘工厂是什么(淘宝淘工厂什么日子有优惠)

    淘宝淘工厂是什么(淘宝淘工厂什么日子有优惠)

  • 微信收款码违规是怎么回事(微信收款码违规怎么解除)

    微信收款码违规是怎么回事(微信收款码违规怎么解除)

  • qq安全达人图标怎么熄灭(qq安全达人图标上面有一个红杠)

    qq安全达人图标怎么熄灭(qq安全达人图标上面有一个红杠)

  • 华为手机扰码在哪里(华为手机扰码是什么意思)

    华为手机扰码在哪里(华为手机扰码是什么意思)

  • tlc mlc区别(mlc与tlc的区别)

    tlc mlc区别(mlc与tlc的区别)

  • qq音乐巅峰榜在哪里投票(qq音乐巅峰榜在哪里看)

    qq音乐巅峰榜在哪里投票(qq音乐巅峰榜在哪里看)

  • 苹果一代笔和二代笔的区别(苹果一代笔和二代笔通用吗)

    苹果一代笔和二代笔的区别(苹果一代笔和二代笔通用吗)

  • 苹果人脸识别原理(苹果人脸识别原理 虹膜)

    苹果人脸识别原理(苹果人脸识别原理 虹膜)

  • Nginx的安装配置教程(nginx安装配置视频)

    Nginx的安装配置教程(nginx安装配置视频)

  • 出口退税附加税分录怎么写
  • 投标成交服务费
  • 去年的增值税普票能作废吗?
  • 企业所得税费用税率
  • 应收账款融资的优缺点
  • 拆装厂房
  • 委托企业和受托企业是什么意思
  • 机票的差额发票可以报销吗
  • 理财产品 会计分录
  • 固定资产清单申报是什么意思
  • 内账价税分离余额怎么处理
  • 电梯按几年摊销
  • 印花税按主营业务成本计算吗
  • 全资子公司合并抵消
  • 外贸企业出口退税流程图
  • 非流动资产处置净收益是指什么
  • 统一社会信用代码在哪里可以查询
  • 万份收益是什么意思0.6
  • 地毯属于什么类别
  • 酒店装修费用会计处理
  • 客户分批付款怎么说
  • window10永久
  • 条形码费用属于哪个科目
  • win11虚拟键盘怎么调出来
  • 期末余额和期初余额
  • windowsserver2008r2
  • 光纤测速网速测试
  • ElementPlusError:[ElPagination] 你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档
  • 开机自动连接宽带怎么设置w11
  • Win11 Build 22000.160(KB5005189)预览版发布,更新了哪些内容
  • 劳务派遣公司的账务处理
  • vue前端后端
  • php mysql pdo
  • eclipse php wamp配置教程
  • 愚人挑战
  • Vue 3 介绍
  • 编译原理第三版
  • 纳什理论是什么
  • 2022最好用的港澳台电视直播
  • 工商银行代发工资多久到账
  • 进项税转出能转回吗
  • c语言strncat函数用法
  • hadoop集群状态
  • 公司法人的车租给公司怎么开发票
  • 出租人在融资租赁中需要处理的会计问题
  • sql server提示不允许保存更改
  • 认缴制下实收资本如何证明
  • 可供出售金融资产名词解释
  • 行程单入账多久钱能到账
  • 应收分保未到期责任准备金是什么科目
  • 公司没有销售收入
  • 补发工资如何计算个税
  • 预提费用如何做账务处理
  • 出口退税转免税怎么写个说明
  • 汇兑损益形成的基础是
  • 典当行收房产证吗直接可以拿钱吗
  • 股东借款可以直接转为实缴出资吗
  • 小规模纳税人季报网上申报流程
  • 预提费用如何预提
  • 期末存货采用成本与什么孰低法计价
  • 科目汇总表里面要填累计折旧吗
  • 加计扣除怎么申报
  • win7端口怎么查看
  • 删除windowsapp
  • ksysslim.exe
  • windows找不到cmd怎么办
  • win8小键盘怎么打开
  • Linux如何查看硬盘分区
  • linux常用命令grep
  • Win10预览版拆弹
  • media and
  • 如何让批处理文件运行不显示
  • jquery td
  • 什么情况下税务局会罚款
  • 税务上成品油换算
  • 广西个人医保缴费时间
  • 开票税额超出1万怎么办
  • 广西南宁税务12366
  • 个人所得税减免标准及明细
  • 广东房产契税电话查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号