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

如何在NuxtLink中为含查询参数的路由添加激活类?

解决NuxtLink查询参数下的激活状态问题

方法1:用exact属性搞定简单场景

直接给NuxtLink加上exact属性,只有当URL完全匹配(包括所有query参数)时,才会触发激活类。示例代码:

<NuxtLink to="/blog/posts" exact>全部文章</NuxtLink>
<NuxtLink to="/blog/posts?page=1" exact>第1页</NuxtLink>
<NuxtLink to="/blog/posts?page=2" exact>第2页</NuxtLink>

要是你有多个筛选参数(比如?page=1&category=vue),这个方法依然管用,只要保证每个链接的query完全一致就行。

方法2:自定义激活判断逻辑(适配复杂场景)

如果是动态生成的query参数,或者需要更灵活的匹配规则,就用custom属性结合手动判断来控制激活状态:

<NuxtLink 
  :to="{ path: '/blog/posts', query: { page: 1 } }"
  custom
  v-slot="{ navigate, isExactActive }"
>
  <a 
    @click="navigate"
    :class="{
      'router-link-active': isExactActive,
      'router-link-exact-active': isExactActive
    }"
  >
    第1页
  </a>
</NuxtLink>

这里直接复用原有的激活类,但只在完全匹配(包含所有query参数)时才添加。

要是需要针对特定query参数做判断,也可以自己写逻辑:

<NuxtLink 
  :to="{ path: '/blog/posts', query: { page: 1, category: 'vue' } }"
  custom
  v-slot="{ navigate }"
>
  <a 
    @click="navigate"
    :class="{
      'router-link-active': $route.path === '/blog/posts' && $route.query.page === '1' && $route.query.category === 'vue',
      'router-link-exact-active': $route.path === '/blog/posts' && $route.query.page === '1' && $route.query.category === 'vue'
    }"
  >
    Vue分类第1页
  </a>
</NuxtLink>

方法3:全局修改路由匹配配置

想让所有带query参数的路由都严格匹配,就在Nuxt配置文件(nuxt.config.js/nuxt.config.ts)里修改路由规则:

export default {
  router: {
    linkExactActiveClass: 'router-link-exact-active',
    linkActiveClass: 'router-link-active',
    extendRoutes(routes, resolve) {
      routes.forEach(route => {
        // 给目标路由开启严格匹配
        if (route.path === '/blog/posts') {
          route.exact = true
        }
      })
    }
  }
}

注意:这个设置会全局影响该路由下的所有NuxtLink,按需调整就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:12:05