Vue Router 传参方式

1.动态路由传参(params)

(1)定义路由(路径参数用 : 标记):

// router/index.js
import { createRouter, createWebHistory } from 'vue-router';
const routes = [
  {
    path: '/user/:id',
    name: 'User',
    component: () => import('@/views/User.vue'),
    props: true // 可选:将 params 映射为组件的 props
  }
];
 
const router = createRouter({
  history: createWebHistory(),
  routes
});
 
export default router;

(2)传参

// 使用 useRouter 跳转
import { useRouter } from 'vue-router';
 
const router = useRouter();
router.push({ name: 'User', params: { id: '123' } }); // 命名路由
// 或
router.push('/user/123'); // 路径形式

(3)接收参数

方式 1:通过 useRoute 获取

<script setup>
import { useRoute } from 'vue-router';
 
const route = useRoute();
const userId = route.params.id; // 获取动态参数
</script>
 
<template>
  <div>User ID: {{ userId }}</div>
</template>

方式 2:通过 props 接收(需路由配置 props: true,因为params 是路由路径的一部分(如 /user/:id),属于“强依赖”参数,可以通过props 接收

<script setup>
defineProps(['id']); // 直接声明 props
</script>
 
<template>
  <div>User ID: {{ id }}</div>
</template>

2.查询参数(query)

(1)定义路由

const routes = [
  { path: '/user', component: User }
]

(2)传参

// 方式 1:通过对象传递
router.push({ path: '/user', query: { id: '123' } }); // URL: /user?id=123
 
// 方式 2:直接拼接路径
router.push('/user?id=123');

(3)接收参数

<script setup>
import { useRoute } from 'vue-router';
 
const route = useRoute();
const userId = route.query.id; // 获取查询参数
</script>