【vue高频面试题—路由篇】:params和query的区别

48 阅读2分钟

在 Vue 中,paramsquery 是两种常见的参数传递方式,它们在使用方式、表现形式、灵活性和适用场景上有显著的区别。以下是详细对比:


params(路径参数)

  • 用途params 通常用于动态路由,即路由路径中的一部分是变量。它们用于构建URL的结构部分。
  • URL表现params 直接嵌入到URL的路径中,例如:/user/123 中的 123 就是一个 params 参数。
  • 传递方式:通过 this.$router.push({ name: 'user', params: { userId: 123 } }) 或在模板中使用 router-link 的 to 属性传递。
  • 限制params 只能传递路径参数,如果URL需要传递多个相同名称的参数,params 不适用。
  • 刷新行为:改变 params 会导致页面刷新。
  • 编码:Vue Router会自动对 params 进行编码和解码。

query(查询参数)

  • 用途query 用于URL的查询字符串部分,用于传递非路径参数,如搜索条件、分页信息等。
  • URL表现query 出现在URL的 ? 后面,例如:/search?q=vue 中的 q=vue 就是一个 query 参数。
  • 传递方式:通过 this.$router.push({ path: '/search', query: { q: 'vue' } }) 或在模板中使用 router-link 的 to 属性传递。
  • 灵活性query 可以传递多个相同名称的参数,例如:/search?q=vue&q=javascript
  • 刷新行为:改变 query 不会导致页面刷新,它们更像是URL的附加信息。
  • 编码:Vue Router不会自动对 query 进行编码,需要手动处理特殊字符。

params 与 query 的对比总结

特性paramsquery
绑定路径动态绑定到路径,占位符必须预定义不绑定路径,可以附加到任意 URL 后
URL 表现形式/user/123/user?id=123
刷新后是否丢失不会丢失不会丢失
适用场景固定层级的路径参数(语义化场景)动态参数、可选参数(筛选、分页)
灵活性较低(需按路径定义)较高(无需路径限制)

注意事项

  1. 路径必须包含动态占位符:

    • 如果路由路径中没有动态占位符(如 :id),params 传参将不起作用。
    • 解决方法: 确保路由配置中定义了 :paramName
  2. URL 中未体现的 params 会丢失:

    • 如果通过 params 传递参数但未在路径中体现(如 /user 而不是 /user/:id),刷新页面后参数会丢失。

    • 解决方法:

      • 将参数绑定到路径中。
      • 或者改用 query 参数,适合动态或可选参数。
  3. params 适用于固定层级的参数:

    • 如果参数是路径的核心组成部分(如用户 ID、文章 ID),用 params
    • 如果参数是动态的或可选的(如筛选条件、分页),用 query 更合适。