在 Vue Router 中,route.params 和 route.query 是两种不同的方式用于传递和获取路由参数,它们的用途和场景有显著区别。下面详细解释它们的区别和用法:
1. route.params.articleId(动态路由参数)
特点
- 定义方式:在路由配置中通过
:paramName定义动态参数。 - URL 格式:
/path/:articleId→ 实际 URL 为/path/123(无?或&)。 - 参数位置:属于路径的一部分(
path段)。 - 类型:通常是字符串或数字(需手动转换类型)。
- 刷新保留:刷新页面后参数仍然存在(因为是路径的一部分)。
路由配置示例
// router.js
const routes = [
{
path: '/article/:articleId', // 动态参数
component: ArticleDetail,
},
];
使用场景
- 用于必传参数(如文章 ID、用户 ID)。
- 参数是路径的一部分(如 RESTful 风格
/article/123)。
代码示例
// 访问 URL: /article/123
const route = useRoute();
const articleId = route.params.articleId; // "123"(字符串类型)
// 转换为数字(如果需要)
const id = Number(articleId);
2. route.query.articleId(查询参数)
特点
- 定义方式:通过
?key=value或&key=value传递参数。 - URL 格式:
/path?articleId=123(以?开头,&分隔多个参数)。 - 参数位置:属于查询字符串(
search段)。 - 类型:始终是字符串(需手动转换类型)。
- 刷新保留:刷新页面后参数仍然存在(因为是 URL 的一部分)。
- 可选性:参数是可选的(不传时
route.query.articleId为undefined)。
路由配置示例
// router.js
const routes = [
{
path: '/article', // 无动态参数
component: ArticleList,
},
];
使用场景
- 用于可选参数(如搜索关键词、分页、排序条件)。
- 参数不直接影响路由匹配(如
/article?page=2&sort=desc)。
代码示例
// 访问 URL: /article?articleId=123
const route = useRoute();
const articleId = route.query.articleId; // "123"(字符串类型)
// 处理可选参数
if (articleId) {
const id = Number(articleId);
console.log(id); // 123
}
3. 核心区别对比
| 特性 | route.params.articleId | route.query.articleId |
|---|---|---|
| 定义方式 | 路由配置中 :articleId | URL 中 ?articleId=123 |
| 是否必传 | 是(否则路由不匹配) | 否(可选参数) |
| URL 示例 | /article/123 | /article?articleId=123 |
| 参数位置 | 路径(path) | 查询字符串(search) |
| 刷新后是否保留 | 是 | 是 |
| 适用场景 | RESTful 资源 ID(如文章详情) | 筛选、分页、排序等附加条件 |
4. 如何选择?
用
params如果:- 参数是路径的一部分(如
/user/1)。 - 参数是必传的(如文章 ID)。
- 需要更简洁的 URL(无
?和&)。
- 参数是路径的一部分(如
用
query如果:- 参数是可选的(如搜索、分页)。
- 需要传递多个条件(如
?page=1&sort=desc)。 - 不影响路由匹配(如
/article和/article?id=1是同一个路由)。
5. 综合示例
场景:文章详情页 + 分页
// 路由配置
const routes = [
{
path: '/article/:articleId', // 动态参数(必传)
component: ArticleDetail,
},
{
path: '/articles', // 查询参数(可选)
component: ArticleList,
},
];
访问方式
- 动态参数(params)
// URL: /article/123 const { articleId } = route.params; // "123" - 查询参数(query)
// URL: /articles?page=2&sort=desc const { page, sort } = route.query; // { page: "2", sort: "desc" }
6. 注意事项
- 类型转换
params和query获取的值默认是字符串,需手动转换为数字(如Number(articleId))。 - 响应式
route.params和route.query都是响应式的,可以在watch或computed中使用。 路由跳转传参
// 使用 params router.push({ path: '/article/123' }); // 使用 query router.push({ path: '/articles', query: { page: 2 } });
总结
params→ 用于路径中的必传参数(如/article/123)。query→ 用于可选的查询条件(如?page=1&sort=desc)。- 根据业务需求选择合适的方式,甚至可以组合使用(如
/article/123?from=home)。
全部评论(0)
还没有任何评论哟~