Vue Router 中:route.params.id 和 route.query.id 的区别

路由参数 params 与 query 区别


在Vue Router中,route.params.id和route.query.id的主要区别在于参数来源和使用场景。


params.id来自URL路径(如/user/123),需预先定义路由配置,通常用于必选资源标识;


query.id来自查询字符串(如/user?id=123),无需定义,用于可选参数如筛选分页。


前者适合资源定位(看什么),后者用于操作资源(怎么看)。两者在刷新或分享时都不会丢失参数值。


route.params.idroute.query.id 的区别


示例

javascript 复制代码
import {useRoute } from 'vue-router';

const route = useRoute();
console.log(route.params.id);
console.log(route.query.id);

在 Vue Router 中,route.params.idroute.query.id 的区别主要体现在数据的来源、URL 的表现形式以及使用场景上。


特性 route.params.id route.query.id
数据来源 来自 URL 路径 中动态匹配的部分(路径参数)。 来自 URL 中 ? 号后面 的查询字符串(查询参数)。
URL 示例 /user/123 这里的 123 就是 params.id /user?id=123 这里的 123 就是 query.id
定义方式 需要在路由配置中预先定义。 无需在路由配置中定义,任何页面都可以接收。
适用场景 必选参数 ,通常用于标识唯一资源 。 例如:文章详情页 /article/1,用户主页 /user/zhangsan 可选参数 ,通常用于筛选、排序、分页 或携带额外信息 。 例如:商品列表页 /products?category=phone&page=2
传递方式 通过路由路径拼接。 通过 URL 的 ?key=value 形式拼接。
是否必须 通常是必选的(除非配置了可选参数),如果缺少可能导致路由无法匹配。 是可选的,不会影响页面的路由匹配,只会影响页面内容。
刷新或分享 URL 刷新或分享后不会丢失,因为它是 URL 的一部分。 刷新或分享后不会丢失,因为它也是 URL 的一部分。
获取方式 route.params.id route.query.id

route.params.id 需要在路由配置中预先定义


router/index.ts 路由

TypeScript 复制代码
{//新建文章和编辑页面共用一个路由,根据是否有id参数来区分新建还是编辑
  path:"/createPost/:id?",//id参数可选
  name:"CreatePost",
  meta:{
    // requireLogin:是否需要登录
    requireLogin:true
  },
  component:()=>import('../views/CreatePost.vue')
}

route.query.id 无需在路由配置中定义,任何页面都可以接收

PostDetail.vue 文章详情页

TypeScript 复制代码
<!-- 编辑和删除区域 -->
<div v-if="showEditArea" class="btn-group mt-5">
  <router-link type="button" class="btn btn-success" :to="{ name: 'CreatePost', query: { id: currentPost._id } }">
    编辑
  </router-link>
  <button type="button" class="btn btn-danger">删除</button>
</div>

总结

  • params.id :存在于路径中,用于定位资源(看什么)。

  • query.id :存在于查询字符串中,用于对资源进行额外操作(怎么看)。

相关推荐
碎碎念_4928 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端
shuaijie05188 小时前
强制修改调用接口的api地址。
javascript·vue.js·ecmascript
katiua12 小时前
Vue-i18n TypeScript 补全提示
vue.js
Fuzio12 小时前
用 Spring Boot + Vue + Fuzio 构建现代 Java 桌面应用
vue.js·spring boot
kisshyshy12 小时前
从0到1彻底理解流式输出:先读懂Vue的“乐高积木”,再拧开LLM的“数据水龙头”
javascript·vue.js·人工智能
饮茶三千13 小时前
电子保函模板编辑器实战二:HTML→FTL 编译转换的设计与实现
前端·vue.js·设计模式
英勇无比的消炎药13 小时前
表单筛选利器:TinyVue BaseSelect 基础选择器实战
vue.js
先吃饱再说13 小时前
从零理解 Vue 3:组件化、数据绑定与响应式完全指南
vue.js·前端框架
gis开发之家15 小时前
《Vue3 从入门到大神29篇》单元测试与 E2E 测试 —— 保障 Vue3 项目的质量
前端·javascript·vue.js·单元测试·前端框架·vue3
forever_world16 小时前
# 💧 从前端视角,彻底搞懂 AI 流式输出 —— 从"接根水管"到 Vue 3 实战
前端·vue.js