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 :存在于查询字符串中,用于对资源进行额外操作(怎么看)。

相关推荐
OpenTiny社区5 小时前
🎨 看完 GenUI SDK 源码我悟了!
前端·vue.js·github
mqcode7 小时前
你项目里的 axios,封对了吗?从裸用到生产级的四步进化
vue.js·axios
Linsk8 小时前
组件 = 模板 + 业务逻辑
java·前端·vue.js
前端啊11 小时前
告别 el-table 打印难题,vue3-print-el-table 来了!
前端·vue.js
AprChell12 小时前
低代码设计器和低代码设计引擎架构综述
前端·vue.js·低代码
Ruihong12 小时前
🎉 VuReact 1.9.0 发布,支持 Vue 3.4 defineModel 编译到 React
vue.js·react.js·面试
英勇无比的消炎药13 小时前
TinyRobot 源码深度分析:OpenTiny 的 AI 对话组件库
前端·vue.js·github
行者全栈架构师1 天前
UniApp集成vk-uview-ui组件库详解:打造高效UI开发体验
前端·vue.js
Csvn1 天前
Vue 3 defineModel 翻车实录:多个 v-model 绑定到底怎么写?
前端·vue.js
Momo__2 天前
VueUse createReusableTemplate —— 单文件组件内的模板复用神器
前端·vue.js