IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ElementUI NavMenu导航菜单跳转到包含子路由的路由时,导航菜单项不高亮显示 -> 正文阅读

[JavaScript知识库]ElementUI NavMenu导航菜单跳转到包含子路由的路由时,导航菜单项不高亮显示

原因:当路由地址发生变化时,想要对应的高亮显示的菜单项发生变化,只需要设置 :default-active="$route.path"即可,但是当跳转的路由(父路由)包含子路由(即包含另一个导航时),且父路由设置了默认显示的子路由,此时父路由对应的菜单项就无法正常高亮显示,因为父路由设置了默认显示的子路由,当前路由地址就变成了子路由的地址,而菜单项高亮显示的路由对应的路由地址为父亲路由,而不是子路由所以无法高亮显示, 简单来说本来 /aaa 应该高亮显示菜单项,但现在实际的路由地址为 /aaa/bbb,所以无法高亮显示。
在这里插入图片描述

解决方法一:计算属性+$route.path+meta属性

① 在子路由中添加meta属性,设置需要高亮显示的路由地址

routes: [
  {
    path: '/aaa',
    component: AAA,
    redircct:'/aaa/bbb'
    children: [
      {
        path: 'bbb',
        component: BBB,
        meta: {
          activeMenu: '/aaa'
      }
    ]
  }
]

② 将default-active的值设置为计算属性

<el-menu
       class="sidebar-el-menu"
      :default-active="onRoutes"
      :collapse="collapse"
      text-color="#fff"
      active-text-color="#fff"
      background-color="#0e0d0a"
      unique-opened
      :router="true">
</el-menu>

③ 在计算属性中判断路由是否有meta属性,如果有则返回meta属性中设置的高亮显示的路由地址,如果没有则返回$route.path

export default {
  computed: {
    onRoutes() {
      const route = this.$route
      const { meta, path } = route
      // 在路由配置文件中设置自定义的路由路径到meta.activeMenu属性中,来控制菜单自定义高亮显示
      // meta中 有activeMenu 字段的子页面,都会显示高亮
      if (meta.activeMenu) {
        return meta.activeMenu
      }
      return path
    }
  }
}
方法二:非添加meta属性

将default-active的值设置为计算属性,然后在计算属性中直接判断 r o u t e . p a t h 是 否 是 以 / x x x 开 头 的 ( / x x x 是 父 路 由 的 路 由 地 址 ) , 如 果 是 以 / x x x 开 头 的 则 返 回 对 应 的 / x x x , 否 则 返 回 route.path是否是以 /xxx 开头的(/xxx 是父路由的路由地址),如果是以 / xxx 开头的则返回对应的 /xxx ,否则返回 route.path/xxx(/xxx)/xxx/xxx,route.path

<el-menu
       class="sidebar-el-menu"
      :default-active="onRoutes"
      :collapse="collapse"
      text-color="#fff"
      active-text-color="#fff"
      background-color="#0e0d0a"
      unique-opened
      :router="true">
</el-menu>
activeMenu() {
      // 获取path地址
      const path = this.$route.path
      // 判断path地址是否是以/xxx开头的(/xxx 为对应显示的一级路由的导航的路由地址)
      if (path.startsWith('/tools')) {
        // 如果是则返回一级路由的导航的路由地址
        return '/tools'
      }
      return path
    }
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:11:30  更:2021-10-09 16:12:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:16:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码