vue3 vue-router传递路由参数实战案例
作者:米粒宝的爸爸
在Vue3中vue-router是Vue.js官方的路由管理器,用于构建单页面应用程序,这篇文章主要给大家介绍了关于vue3 vue-router传递路由参数的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
在 Vue 3 中,使用 vue-router 传递路由参数是非常常见的需求。
1. 使用动态路由参数(params)
动态路由参数是定义在路由规则中的占位符部分,例如 /user/:id。你可以通过 router.push 或 <router-link> 传递这些参数。
(1) 配置动态路由
import { createRouter, createWebHistory } from 'vue-router';
const routes = [
{
path: '/user/:id', // 动态参数 :id
component: () => import('@/views/UserDetail.vue')
}
];
const router = createRouter({
history: createWebHistory(),
routes
});
export default router;(2) 通过 router.push 传递参数
import { useRouter } from 'vue-router';
export default {
setup() {
const router = useRouter();
const navigateToUser = (userId) => {
router.push({ name: 'user', params: { id: userId } }); // 传递参数
};
return { navigateToUser };
}
};(3) 在目标组件中获取参数
import { useRoute } from 'vue-router';
export default {
setup() {
const route = useRoute();
const userId = route.params.id; // 获取动态参数
return { userId };
}
};2. 使用查询参数(query)
查询参数是 URL 中 ? 后面的部分,例如 /search?name=Vue&id=123。你可以通过 router.push 或 <router-link> 传递查询参数。
(1) 通过 router.push 传递查询参数
import { useRouter } from 'vue-router';
export default {
setup() {
const router = useRouter();
const navigateToSearch = () => {
router.push({
path: '/search',
query: { name: 'Vue', id: 123 } // 传递查询参数
});
};
return { navigateToSearch };
}
};(2) 在目标组件中获取查询参数
import { useRoute } from 'vue-router';
export default {
setup() {
const route = useRoute();
const name = route.query.name; // 获取查询参数
const id = route.query.id;
return { name, id };
}
};3. 使用命名路由(推荐)
如果你的路由配置中定义了 name 属性,可以通过命名路由传递参数,这样可以避免硬编码路径。
(1) 定义命名路由
const routes = [
{
path: '/user/:id',
name: 'user', // 定义路由名称
component: () => import('@/views/UserDetail.vue')
}
];(2) 通过 router.push 使用命名路由传递参数
import { useRouter } from 'vue-router';
export default {
setup() {
const router = useRouter();
const navigateToUser = (userId) => {
router.push({
name: 'user', // 使用路由名称
params: { id: userId } // 传递动态参数
});
};
return { navigateToUser };
}
};4. 使用 <router-link> 传递参数
除了编程式导航(router.push),你还可以通过 <router-link> 传递参数。
(1) 传递动态参数
<template>
<router-link :to="{ name: 'user', params: { id: 123 } }">
跳转到用户详情页
</router-link>
</template>(2) 传递查询参数
<template>
<router-link :to="{ path: '/search', query: { name: 'Vue', id: 123 } }">
跳转到搜索页
</router-link>
</template>5. 区分动态参数和查询参数
| 类型 | 位置 | 示例 URL | 获取方式 |
|---|---|---|---|
动态参数 (params) | 路径中 | /user/123 | route.params.id |
查询参数 (query) | URL 的 ? 后 | /search?name=Vue&id=123 | route.query.name |
6. 注意事项
动态参数会被移除
- 如果你在导航时切换了路由,但没有重新设置动态参数,那么参数会被清除。
- 解决方法:确保在导航时重新传递参数,或者使用
watch监听route.params的变化。
查询参数不会被移除
- 查询参数会保留在 URL 中,直到你手动清除或覆盖它们。
强制刷新页面时丢失参数
- 如果用户刷新页面,动态参数和查询参数仍然可以从
route.params和route.query中获取。
- 如果用户刷新页面,动态参数和查询参数仍然可以从
7. 完整示例
路由配置
const routes = [
{
path: '/user/:id',
name: 'user',
component: () => import('@/views/UserDetail.vue')
},
{
path: '/search',
name: 'search',
component: () => import('@/views/SearchPage.vue')
}
];导航组件
<template>
<div>
<!-- 传递动态参数 -->
<router-link :to="{ name: 'user', params: { id: 123 } }">
查看用户详情
</router-link>
<!-- 传递查询参数 -->
<router-link :to="{ path: '/search', query: { name: 'Vue', id: 123 } }">
搜索内容
</router-link>
</div>
</template>接收参数的目标组件
<template>
<div>
<p>用户 ID: {{ userId }}</p>
<p>查询参数 Name: {{ name }}</p>
<p>查询参数 ID: {{ id }}</p>
</div>
</template>
<script>
import { useRoute } from 'vue-router';
export default {
setup() {
const route = useRoute();
const userId = route.params.id; // 获取动态参数
const name = route.query.name; // 获取查询参数
const id = route.query.id;
return { userId, name, id };
}
};
</script>总结
- 动态参数:适合用于 URL 中明确标识资源的情况,例如
/user/123。 - 查询参数:适合用于可选参数或过滤条件,例如
/search?name=Vue&id=123。 - 命名路由:推荐使用命名路由,避免硬编码路径。
到此这篇关于vue3 vue-router传递路由参数的文章就介绍到这了,更多相关vue3 vue-router传递路由参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
