vue3的路由传参query、params以及动态路由传参

一、query传参

编程式导航 使用router.push 或者 router.replace 的时候,改为对象形式新增query 必须传入一个对象

import { useRouter } from 'vue-router';
...
const router = useRouter()
const toDetail = (item: Item) => {
    router.push({
        path: '/info',
        query: item
    })
}

接受参数

使用 useRoutequery

<template>
    <div>
        <div>ID:{{route.query?.id}}</div>
        <div>名称:{{route.query?.name}}</div>
        <div>价格:{{route.query?.price}}</div>
    </div>
</template>

<script setup lang='ts'>
import { useRoute } from 'vue-router';
...
const route = useRoute()
</script>

<style lang='less' scoped>
</style>

二、params传参

编程式导航 使用router.push 或者 router.replace 的时候,改为对象形式并且只能使用name,path无效,然后传入params

import { useRouter } from 'vue-router';
...
const router = useRouter()
const toDetail = (item: Item) => {
    router.push({
        name: 'Info',
        params: item
    })
}

接受参数

使用 useRouteparams

<template>
    <div>
        <div>ID:{{route.params?.id}}</div>
        <div>名称:{{route.params?.name}}</div>
        <div>价格:{{route.params?.price}}</div>
    </div>
</template>

<script setup lang='ts'>
import { useRoute } from 'vue-router';
...
const route = useRoute()

</script>

<style lang='less' scoped>
</style>

三、动态传参

很多时候,我们需要将给定匹配模式的路由映射到同一个组件。
例如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数

// router.ts
import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";

const routes: Array<RouteRecordRaw> = [{
    path: '/',
    name: 'table',
    component: () => import('@/view/Table/index.vue')
}, {
    path: '/info/:id',
    name: 'Info',
    component: () => import('@/view/Table/info.vue')
},
...
]

const router = createRouter({
    history: createWebHistory(),
    routes
})

export default router
import { useRouter } from 'vue-router';
...
const router = useRouter()
const toDetail = (item: Item) => {
    router.push({
        name: 'Info',
        params: {id: item.id}
    })
}

接受参数

使用 useRouteparams

<template>
    <div>
        <div>ID:{{ item?.id }}</div>
        <div>名称:{{ item?.name }}</div>
        <div>价格:{{ item?.price }}</div>
    </div>
</template>

<script setup lang='ts'>
import { useRoute } from 'vue-router';
import { data } from './data.json'
...
const route = useRoute()
// 模拟根据id获取数据
const item = data.find(v => v.id === Number(route.params.id))

</script>

<style lang='less' scoped>
</style>

四、query传参和params传参的区别

  • query 传参配置的是 path,而 params 传参配置的是name且在 params中配置 path 无效
  • query传递的参数会显示在地址栏中,而params传参不会
  • query传参刷新页面数据不会消失,而params传参刷新页面数据回消失
  • params可以使用动态传参,动态传参的数据会显示在地址栏中,且刷新页面不会消失,因此可以使用动态params传参,根据动态传递参数在传递页面获取数据,以防页面刷新数据消失
  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: Vue3中的路由传参有两种方式:queryparamsquery是通过URL中的查询参数传递参数,例如:/user?id=123&name=张三。在路由配置中,可以使用props属性将query参数映射到组件的props中。 params是通过URL中的路径参数传递参数,例如:/user/123。在路由配置中,需要使用动态路由配置来定义路径参数,例如:/user/:id。在组件中可以通过$route.params来获取路径参数。 需要注意的是,query参数是可选的,而params参数是必须的。另外,query参数可以在URL中直接修改,而params参数只能通过路由跳转来修改。 ### 回答2: Vue.js是一款流行的JavaScript框架之一,它具有易用、高效且灵活的特点。在Vue.js中,路由是非常重要的一个模块,而路由传参就是常见的需求。 Vue3版本中,路由传参主要有两种方式:queryparams。 1. Query传参 Query传参是通过在URL中添加参数,从而将参数传递给目标组件。比如我们要传递一个名称为“name”,值为“user”的参数,可以在路由链接中添加“?name=user”的参数: ```javascript <router-link :to="{ path: '/user', query: { name: 'user' } }">User</router-link> ``` 在目标组件中,我们可以通过$router对象来访问参数: ```javascript this.$route.query.name // user ``` 2. Params传参 Params传参是通过在路由路径中添加参数,从而将参数传递给目标组件。以用户ID为例,我们可以在路由配置中添加“:id”参数: ```javascript { path: '/user/:id', name: 'User', component: User } ``` 在路由链接中,我们可以通过$router对象来设置参数: ```javascript <router-link :to="{ path: '/user/1' }">User 1</router-link> ``` 在目标组件中,我们可以通过$router对象来访问参数: ```javascript this.$route.params.id // 1 ``` 需要注意的是,我们在路由配置中定义的参数名和在路由链接中传递的参数名必须保持一致。另外,Params传参是不支持通过键值对的方式传递多个参数的。 总结 在Vue3中,路由传参有两种方式:queryparamsQuery传参是通过在URL中添加参数,Params传参是通过在路由路径中添加参数。在使用路由传参时,我们需要注意传递参数的方式和参数名的一致性,以确保传参能够正常工作。 ### 回答3: Vue3 是目前全球使用人数最多的前端框架之一,其中路由也是 Vue3 中非常重要的一个部分。在Vue3中,我们可以使用路由传递参数从一个页面到另一个页面。Vue3 路由传参分为两种方式:queryparams。 1. query方式 query方式是通过URL传参的方式将参数进行传递和获取的。在URL后面加上 ?参数名=参数值,可以传递一个或多个参数,多个参数之间使用 & 符号连接。 比如,我们可以这样传递参数: ```javascript <router-link :to="{path:'/user',query:{id:1,name:'Tom'}}">用户</router-link> ``` 在路由中我们可以通过 `$route.query` 获取传递的参数,例如: ```javascript { path: '/user', name: 'user', component: User, query: { id: 1, name: 'Tom' } } ``` 2. params方式 params方式是通过路由路径中的参数将参数进行传递和获取的。使用这种方式传递参数时,参数会变成路由路径的一部分。 比如,我们可以这样传递参数: ```javascript <router-link :to="{ path: '/user/1/Tom' }">用户</router-link> ``` 在路由中我们可以通过 `$route.params` 获取传递的参数,例如: ```javascript { path: '/user/:id/:name', name: 'user', component: User, params: { id: 1, name: 'Tom' } } ``` 总的来说,Vue3 路由传参 queryparams 都有其优劣势。query 参数可以传递任意数量的参数,但是 URL 中传递参数可能会因为长度而受限;params 参数可以在 URL 中优雅地显示要传递的参数,但是只能传递有限的参数,并且参数的顺序也很重要。根据实际情况,我们应该灵活使用不同的方式来进行参数传递。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡小多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值