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

相关推荐
前端那点事18 小时前
Vue3 新趋势:10个高阶实用操作|性能优化+开发提效+避坑指南
前端·vue.js
前端那点事19 小时前
90%前端只会皮毛!JSON.parse/stringify高阶用法、数据规则、避坑终极指南
前端·vue.js
需要坚持的人19 小时前
让 SVG 不再“丢字变形”:一次思维导图导出文字转 Path 的实战优化
前端·vue.js·svg
蜡台19 小时前
idea 配置 vue 运行命令时, scripts 一栏始终为空
前端·vue.js·intellij-idea
ZC跨境爬虫20 小时前
跟着 MDN 学 HTML day_43:(DocumentFragment 接口详解)
前端·javascript·vue.js·ui·html·音视频
前端 贾公子21 小时前
响应式系统基础:基于依赖追踪的响应式系统的本质(下)
前端·javascript·vue.js
打工人小夏21 小时前
使用finalshell在新服务器上部署前端页面
linux·服务器·前端·vue.js
xiangxiongfly9151 天前
Vue3 根据角色权限动态加载路由
前端·javascript·vue.js·动态加载路由
Aolith1 天前
我是怎么把个人论坛首页性能从80分优化到100分的(附踩坑全记录)
vue.js·性能优化
Amy_yang1 天前
uni-app 安卓端纯前端预览 DOCX 的实现思路
前端·vue.js