element导航栏对应路由高亮在刷新或前进后退时错误(二级子路由和三级子路由以上各自的解决办法)

news/2024/7/19 13:17:02 标签: vue, elementui, es6, javascript, js

问题描述:

当设置的有默认路径时,进入到二级或三级路由时,刷新或前进后退操作会导致导航栏高亮没有改变或错误

使用前提

将router里面的main.js里的路由路径设置全部设置为完整的路径。

routes: [{
            //路径为空时跳到发现音乐
            path: '',
            redirect: '/musicHome/findMusic',
        },
        {
            path: '/musicHome',
            name: 'musicHome',
            component: () =>
                import ('@/views/musicHome'),
            children: [{
                    path: '/musicHome/findMusic',
                    name: 'findMusic',
                    redirect: '/musicHome/findMusic/personRecom',
                    component: () =>
                        import ('@/views/musicHome/findMusic/findMusic'),
                    children: [{
                            path: '/musicHome/findMusic/personRecom',
                            name: 'personRecom',
                            component: () =>
                                import ('@/views/musicHome/findMusic/personRecom/personRecom')
                        },
                        {
                            path: '/musicHome/findMusic/songList',
                            name: 'songList',
                            component: () =>
                                import ('@/views/musicHome/findMusic/songList/songList')
                        },
                        {
                            path: '/musicHome/findMusic/playList',
                            name: 'playList',
                            component: () =>
                                import ('@/views/musicHome/findMusic/playList/playList')
                        },
                        {
                            path: '/musicHome/findMusic/singerList',
                            name: 'singerList',
                            component: () =>
                                import ('@/views/musicHome/findMusic/singerList/singerList')
                        },
                        {
                            path: '/musicHome/findMusic/newSong',
                            name: 'newSong',
                            component: () =>
                                import ('@/views/musicHome/findMusic/newSong/newSong')
                        }
                    ]
                },
                {
                    path: '/musicHome/recomVideo',
                    name: 'recomVideo',
                    component: () =>
                        import ('@/views/musicHome/recomVideo/recomVideo')
                },
                {
                    path: '/musicHome/myCloudMusic',
                    name: 'myCloudMusic',
                    component: () =>
                        import ('@/views/musicHome/myCloudMusic/myCloudMusic')
                },
                {
                    path: '/musicHome/myFavoriteMusic',
                    name: 'myFavoriteMusic',
                    component: () =>
                        import ('@/views/musicHome/myFavoriteMusic/myFavoriteMusic')
                }
            ]
        }
    ]

三级路由如下图:

在这里插入图片描述
代码:

<template>
  <div class="headTab">
    <el-menu default-active="/musicHome/findMusic/songList" class="el-menu-demo" mode="horizontal" :router="true">
  <el-menu-item index="/musicHome/findMusic/personRecom">个性推荐</el-menu-item>
  <el-menu-item index="/musicHome/findMusic/songList">歌单</el-menu-item>
  <el-menu-item index="/musicHome/findMusic/playList">排行榜</el-menu-item>
  <el-menu-item index="/musicHome/findMusic/singerList">歌手</el-menu-item>
  <el-menu-item index="/musicHome/findMusic/newSong">最新音乐</el-menu-item>
</el-menu>
  </div>
</template>

由图可见
我默认路由设置为为歌单
在页面刷新后,子路由并没有切换到歌单,但是默认高亮却切换到了歌单

原因分析:

网页刷新后导航栏也会随着刷新
所以导航栏高亮就会返回到之前设定好的默认值

解决办法

给默认高亮路径绑定为当前路由路径
代码如下:

<template>
  <div class="headTab">
    <el-menu :default-active="this.$route.path" class="el-menu-demo" mode="horizontal" :router="true">
  <el-menu-item index="/musicHome/findMusic/personRecom">个性推荐</el-menu-item>
  <el-menu-item index="/musicHome/findMusic/songList">歌单</el-menu-item>
  <el-menu-item index="/musicHome/findMusic/playList">排行榜</el-menu-item>
  <el-menu-item index="/musicHome/findMusic/singerList">歌手</el-menu-item>
  <el-menu-item index="/musicHome/findMusic/newSong">最新音乐</el-menu-item>
</el-menu>
  </div>
</template>

记住默认高亮前需要加上:哦

修改后三级路由效果图

在这里插入图片描述
前进后退都可以让对应的导航栏保持高亮

二级路由中

二级路由中(也就是三级路由的上一级)我也想如法炮制使用

<template>
  <div class="leftNav">
     <el-col>
    <el-menu
      :router="true"
      active-text-color = '#000000'
      :default-active="this.$route.path"
      class="el-menu-vertical-demo"
      text-color="#5c5c5c"
      @open="handleOpen"
      @close="handleClose">
      <p class="leftNavFont">推荐</p>
      <div>
      <el-menu-item index="/musicHome/findMusic">
        <i class="iconfont icon-music"></i>
        <span slot="title">发现音乐</span>
      </el-menu-item>
      <el-menu-item index="/musicHome/recomVideo">
        <i class="iconfont icon-video"></i>
        <span slot="title">推荐视频</span>
      </el-menu-item>
      </div>
      <p class="leftNavFont">我的音乐</p>
      <div>
        <el-menu-item index="/musicHome/myCloudMusic">
            <i class="iconfont icon-yun"></i>
            <span slot="title">我的音乐云盘</span>
          </el-menu-item>
      </div>
      <p class="leftNavFont">创建的歌单</p>
      <div>
        <el-menu-item index="/musicHome/myFavoriteMusic">
            <i class="iconfont icon-heart"></i>
            <span slot="title">我喜欢的音乐</span>
          </el-menu-item>
      </div>
    </el-menu>
</el-col>
</div>
</template>

效果图

在这里插入图片描述
咦????
为什么我的二级路由反而没有高亮了呢
于是我打印出了当前的路由路径
在这里插入图片描述
看到这里大家是不是明白了

原因分析:

当前路由指向的是/musicHome/findMusic/songList,但二级路由的路径却是/musicHome/findMusic,所以它当然不会高亮!

那么我们想一想,是不是我们能用到js的一些函数对当前路径进行处理,只拿到我们想要的那一部分就可以了呢?

解决办法

我对当前路径做了处理,只截取到二级路由的那一部分

created() {
            console.log('/' + this.$route.path.split('/')[1] + '/' + this.$route.path.split('/')[2]);
        },

在这里插入图片描述
这样就拿到啦
对默认路由高亮进行修改

:default-active="'/' + this.$route.path.split('/')[1] + '/' + this.$route.path.split('/')[2]"

效果图

在这里插入图片描述
现在无论刷新还是前进后退相应的路由都会保持高亮了。

总结

把导航栏的默认高亮路由路径绑定到相应的路由路径,无论是几级路由,把当前路由需要的部分截取下来就能完成绑定功能啦


http://www.niftyadmin.cn/n/861684.html

相关文章

基于vue的高仿网易云音乐网站,实现大多数功能

文章目录前言项目演示地址线上地址项目仓库总结前言 基于Vue Vue-Router Vuex axios elementui,ui参考网易云音乐&#xff0c;后端接口使用网易云音乐接口.&#xff0c;项目中遇到的bug基本都有解决 项目演示地址 bilibili高仿网易云音乐. 线上地址 wdwmusic.&#xf…

vue部署后刷新白屏404?前端路由模式详解(hash和history)

文章目录前言一、为什么要有前端路由&#xff1f;二、前端路由模式1.hash优点缺点2.history优点缺点三、为什么history会404呢&#xff1f;1.原因2.解决方式总结前言 不知道大家有没有遇到过一种情况&#xff0c;当自己的vue部署在服务器上时&#xff0c;一切都如想象办运转&a…

手把手带你在vue中封装axios(含携带token)

文章目录前言一、认识axios1、axios是什么&#xff1f;2、为什么要用axios&#xff1f;特性二、封装axios1.引入库2.建立封装axios实例文件3.导入所需依赖4.创建axios实例5.axios拦截器请求拦截器响应拦截器5.封装成请求6.完整代码代码代码中的setLocalStorage和getLocalStorag…

防抖节流原理及实现(含演示图)

文章目录前言一、防抖&#xff08;debounce&#xff09;1、什么是防抖&#xff1f;2、防抖实现二、节流&#xff08;throttle&#xff09;1.什么是节流&#xff1f;2.节流实现总结前言 随着前端飞速的发展&#xff0c;用户体验也越来越重要。大家在逛一些网站时&#xff0c;会…

【css定位】超详细!手把手带你体验position属性(含sticky属性与效果图)

文章目录前言一、relative1.介绍2.场景相对自身定位二、absolute1.介绍2.场景相对于除static外的父元素定位父元素都是static相对于谁定位脱离文档流会占位吗三、fixed1.介绍2.场景四、sticky1.介绍2.场景总结前言 面试官&#xff1a;说说position的属性吧。 我&#xff1a;哦…

超超超超详细!手把手带你用js实现简易版position:sticky

文章目录一、基本思路二、实现过程1.准备工作1.获取dom元素&#xff0c;设置偏移量2.给滑动添加事件3.判断是否在可视区4.脱离可视区触发回调函数总结# 前言 前面我们在介绍position属性时&#xff08;不知道的小伙伴可以去看看我的另一篇说position的博客哟&#xff0c;传送门…

一路摸爬滚打,我终于踏上了我的程序员之路!

我正在参与CSDN《新程序员》有奖征文活动&#xff0c;活动链接&#xff1a; https://marketing.csdn.net/p/52c37904f6e1b69dc392234fff425442 文章目录前言浑浑噩噩开学季自信心被重击虚度光阴初识编程你好&#xff0c;前端我的第一个轮播图期末课设前端是没有前途的开始前端之…

$set解决vue中修改数组或对象视图不更新的问题

文章目录前言一、案例二、解决方法$set总结前言 相信大家和我一样&#xff0c;在开发中总是遇到一个问题。 为啥我修改v-for遍历的数组&#xff0c;视图却没有更新&#xff1f;&#xff1f;&#xff1f;当我点击其他操作重新渲染后&#xff0c;又更新了&#xff1f;&#xff…