You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue Router:点击router-link时如何将新查询参数追加至现有查询参数中?

解决Vue Router中router-link追加查询参数的问题

这个问题我之前也碰到过!其实你误解了append属性的作用——它是用来追加路径片段的(比如把/detail追加到/product后面变成/product/detail),完全不会处理查询参数,所以才会出现新参数直接替换旧参数的情况。

要实现查询参数的追加效果,核心思路是手动合并当前路由的查询参数和新参数,下面给你两种实用的实现方式:

方式一:Vue 2选项式API写法

在组件里定义一个方法,专门用来合并查询参数,然后把这个方法的返回值绑定到router-link的:to属性上:

<template>
  <div>
    <router-link :to="mergeQuery({ color: 'red' })">color</router-link>
    <router-link :to="mergeQuery({ size: 2 })">size</router-link>
    <router-link :to="mergeQuery({ men: true })">men</router-link>
  </div>
</template>

<script>
export default {
  methods: {
    mergeQuery(newParams) {
      return {
        // 展开当前路由已有的查询参数,再展开新参数实现追加/覆盖
        query: { ...this.$route.query, ...newParams },
        // 如果需要固定当前路径,可以加上这一行(默认会保留当前路径,可省略)
        path: this.$route.path
      }
    }
  }
}
</script>

方式二:Vue 3组合式API写法

如果是用Vue 3的<script setup>语法,写法会更简洁:

<template>
  <div>
    <router-link :to="mergeQuery({ color: 'red' })">color</router-link>
    <router-link :to="mergeQuery({ size: 2 })">size</router-link>
    <router-link :to="mergeQuery({ men: true })">men</router-link>
  </div>
</template>

<script setup>
import { useRoute } from 'vue-router'

// 获取当前路由实例
const route = useRoute()

const mergeQuery = (newParams) => {
  return {
    query: { ...route.query, ...newParams },
    path: route.path // 可选,固定当前路径
  }
}
</script>

原理说明

这种写法通过ES6的扩展运算符...,把当前路由的query对象和新的参数对象合并在一起:

  • 如果新参数和已有参数重名,新参数会覆盖旧参数(比如再次点击color链接会更新color的值)
  • 如果新参数是新字段,就会直接追加到查询参数里,完全符合你的预期效果

内容的提问来源于stack exchange,提问作者morteza mortezaie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 22:42:50