Vue Router (匹配当前路由的链接和类名配置)

前言:

当前路由匹配的组件 是通过 <RouterLink> 组件实现的。

<RouterLink> 组件会为匹配当前路由的链接添加两个 CSS 类,router-link-active和router-link-exact-active。

RouterLink 组件有两个属性,activeClass 和 exactActiveClass,可以用来更改应用的类名。

1、链接在什么时候匹配当前路由

  • 它与当前路径匹配相同的路由记录(即配置的路由)。
  • 它的 params 与当前路径的 params 相同。
    • 如果你使用了嵌套路由,任何指向祖先路由的链接也会被认为是匹配当前路由的,只要相关的 params 匹配。

    • 其他路由属性,例如 query,不会被考虑在内。

    • 路径不一定需要完全匹配。例如,使用 alias 仍然会被认为是匹配的,只要它解析到相同的路由记录和 params。

    • 如果一个路由有 redirect,在检查链接是否匹配当前路由时不会跟随重定向。

条件:to路径是当前路由路径的"前缀"(即父级路由)

  • 当前路由路径是 /user/profile

  • 如果 <router-link to="/user">,那么 /user是 /user/profile的前缀 ,因此该链接会被认为 "匹配"当前路由 ,会添加 router-link-active类。

示例:

  • 当前路径:/user/profile

  • <router-link to="/user">用户</router-link>→ ✅ 匹配,会添加 router-link-active

  • <router-link to="/user/profile">个人资料</router-link>→ ✅ 匹配,也会添加 router-link-active和 router-link-exact-active

精确匹配不包括祖先路由。

条件:to路径与当前路由路径 完全一致(包括 query、hash 等可能的影响因素)

  • 当前路由路径是 /about

  • 如果 <router-link to="/about">,路径完全一样,该链接会被认为 "精确匹配"当前路由 ,会添加 router-link-exact-active类。

示例:

  • 当前路径:/about

  • <router-link to="/about">关于</router-link>→ ✅ 精确匹配,会添加 router-link-exact-active

  • <router-link to="/about/">(带斜杠)→ 通常也 ✅ 匹配(视配置而定)

  • <router-link to="/about/us">→ ❌ 不匹配

4、配置类名

属性名称 作用 默认值 说明
**active-class**​ 自定义 **普通匹配(非精确)**​ 时应用的 CSS 类名 'router-link-active' 当 <router-link>的 to是当前路由的 前缀路径 ​ 时触发(如 /user匹配 /user/profile)
**exact-active-class**​ 自定义 精确匹配​ 时应用的 CSS 类名 'router-link-exact-active' 当 <router-link>的 to与当前路由 完全一致 ​ 时触发(如 /about匹配 /about)

4.1 为当前路由链接配置自定义类名

复制代码
<template>
  <div>
    <!-- 普通匹配时使用自定义类名 my-active -->
    <router-link 
      to="/user" 
      active-class="my-active"
    >
      用户
    </router-link>

    <!-- 精确匹配时使用自定义类名 my-exact -->
    <router-link 
      to="/about" 
      exact-active-class="my-exact"
    >
      关于
    </router-link>
  </div>
</template>

<style>
.my-active {
  color: orange;
  font-weight: bold;
}

.my-exact {
  color: green;
  border-bottom: 2px solid green;
}
</style>

当访问 /user或其子路由(如 /user/profile)时:

<router-link to="/user">会添加 my-active类(因为匹配前缀)

当**精确访问 /about**​ 时:

<router-link to="/about">会添加 my-exact类

4.2 全局配置

为整个应用的所有 <router-link>统一修改默认的类名 ,而不是每个都单独配置,可以使用 Vue Router 的全局配置:

复制代码
import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [...], // 你的路由配置
  // 全局配置 router-link 的激活类名
  linkActiveClass: 'global-active',        // 替代默认的 router-link-active
  linkExactActiveClass: 'global-exact-active' // 替代默认的 router-link-exact-active
})

export default router
  • linkActiveClass: 全局替换 router-link-active(普通匹配类名)

  • linkExactActiveClass: 全局替换 router-link-exact-active(精确匹配类名)

  • ⚠️ 一旦设置了全局类名,单个 <router-link>上的 active-class和 exact-active-class优先级更高,会覆盖全局配置。

你可以为 <router-link>匹配当前路由时配置类名,通过 active-class(普通匹配)和 exact-active-class(精确匹配)属性进行单个配置,也可以通过 Vue Router 的全局配置 linkActiveClass和 linkExactActiveClass来统一设置所有链接的激活样式类。

相关推荐
echome8885 分钟前
CSS 布局:Flex 和 Grid 怎么选,附常见坑
前端·css·html
计算机魔术师11 分钟前
科技巨头砸7400亿押注AI,为什么苹果成了唯一赢家?
前端
系统集成-鹰翔20 分钟前
ERP推单数据库怎么备份:SQLite WAL模式下只复制db文件为什么可能漏任务
javascript·数据库·经验分享·后端
QianhangQianping21 分钟前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做
Nymph_Zhu1 小时前
pdf转换markdown预览及内容互相点击定位
前端·pdf·vue3·markdown·element-plus
计算机魔术师1 小时前
Google 一天蒸发5000亿,Reddit 靠 AI 训练喂得饱自己却饿死
前端
小大宇1 小时前
Vue知识点-ElementPlus-05 输入框
前端·javascript·vue.js
软件技术NINI1 小时前
基于SpringBoot和Vue的摇滚乐鉴赏网站
vue.js·spring boot·后端·spring·html·毕业设计·毕设
外贸GEO优化2 小时前
外贸独立站的可抓取性:JS 渲染、懒加载与无限滚动到底影响什么
开发语言·javascript·ecmascript
l1m0_2 小时前
AI设计工具有哪些?Paico、Pixso AI、墨刀AI、Lovable、Codex怎么选
前端·人工智能·ai·设计·墨刀·codex·pixso