vue组件的路由高亮问题解决方法


Posted in Vue.js onMay 11, 2021

前言

之前我对于路由的高亮都是使用缓存,给他的所有路由遍历一遍,每点击一下的时候,给他的当前值高亮,赋值active。后来发现一刷新就不行,高亮的就变成默认值0了,这里主要是讲这个问题的解决办法。

第一种是通过这样的添加类:

.router{
        font: 12px/40px '微软雅黑';
        background: pink;
        background: pink;
        color: white;
        cursor: pointer;
        text-align: center;
        display: inline-block;
        width: 40px;
        background: pink;
        &.isActive{
            background: blue;
            color:red;
        }
    }

第二种是监听path:

原本的代码是这样的:

<template>
<div id="main">
    <ul style="height:40px;background:pink;">
        <li  class="router" v-for="(item,index) in items" :key="index" style="float:left;" :class="item.isActive?'isActive':''" @click="routerTo(item,index)">
            <span >{{item.name}}</span>
        </li>
    </ul>
    <router-view></router-view>
    </div>
    
</template>
<script>
    export default {
        data () {
            return {
                activeIndex2:'0',
                items:[
                    {name:'twoPage',code:'twoPage',path:'/twoPage',defaultIcon:require('@/assets/icon/BehaviorRank-default.png'),
                    activeIcon:require('@/assets/icon/behaviorrank-active.png'),isActive:true},
                    {name:'three',code:'three',path: '/three',defaultIcon:require('@/assets/icon/ChannelAllocation-default.png'),
                    activeIcon:require('@/assets/icon/ChannelAllocation-active.png'),isActive:false},
                    {name:'four',code:'four',path:'/four',defaultIcon:require('@/assets/icon/myReport-default.png'),
                    activeIcon:require('@/assets/icon/myReport-active.png'),isActive:false},
                ],
            }
        },
        methods:{
            routerTo(item,index) {
                 for (let i = 0; i < this.items.length; i++) {
                    this.items[i].isActive=false
                    
                }
                this.items[index].isActive=true
                this.$router.push({name:item.name})
               
            },
        }
    }
</script>
<style lang='less'>
#main{
    .router{
        font: 12px/40px '微软雅黑';
        background: pink;
        background: pink;
        color: white;
        cursor: pointer;
        text-align: center;
        display: inline-block;
        width: 40px;
        background: pink;
        
    }
    .isActive{
            background: blue;
            color:red;
        }
    
}

</style>

效果:

vue组件的路由高亮问题解决方法

但如果点击刷新会这样:高亮的Index跑到了初始化0的位置。

vue组件的路由高亮问题解决方法

如何解决这种问题

有一种方法是通过缓存sessionStorage。每次点击一下就存入缓存,刷新就从变量取值,变量没有值就从缓存取值。但一直存一直取可能有的人觉得麻烦。

还有一种方法就是初始化的时候获取路由,根据不同的路由激活对应的导航

created(){
            // var path=window.location.hash.slice(2);//没有参数时这种写法也可以,不推荐
            var path=this.$route.name//推荐这种
            console.log(path)
            if(path){
                for (let i = 0; i < this.items.length; i++) {
                    this.items[i].isActive=false
                }
                switch(path){
                    case 'twoPage':
                    this.items[0].isActive=true;
                    break;
    
                    case 'three':
                    this.items[1].isActive=true;
                    break;
    
                    case 'four':
                    this.items[2].isActive=true;
                    break;
                }
            }
        },

附:vue点击当前路由高亮的具体代码

 

功能展示:

vue组件的路由高亮问题解决方法

组件代码:

标签上加exact

.router-link-active{
 background: rgba(255,255,255,0.8);
 color: gray;
 }

 

<template>
 <nav>
  <ul>
  <li>
   <router-link to="/" exact>博客</router-link>
   <router-link to="/AddBlog" exact>写博客</router-link>
  </li>
  </ul>
 </nav>
</template>
 
<script>
 export default {
  name: "bolgheader"
 }
</script>
 
<style scoped>
 ul{
 list-style-type: none;
 text-align: center;
 margin:0;
 }
 li{
 display: inline-block;
 margin:0 10px;
 }
 a{
 color:rgb(102, 119, 204);
 text-decoration: none;
 padding:12px;
 border-radius: 5px;
 font-size:20px;
 }
 nav{
 background: #eee;
 padding: 30px 0;
 margin-bottom: 40px;
 }
 .router-link-active{
 background: rgba(255,255,255,0.8);
 color: gray;
 }
</style>

总结

到此这篇关于vue组件的路由高亮问题解决方法的文章就介绍到这了,更多相关vue组件的路由高亮内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
springboot+vue实现文件上传下载
Nov 17 Vue.js
Vue如何循环提取对象数组中的值
Nov 18 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
详解Vue的options
May 15 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 Vue.js
如何优化vue打包文件过大
Apr 13 Vue.js
vue实现省市区联动 element-china-area-data插件
Apr 22 Vue.js
Vue通过懒加载提升页面响应速度
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
如何使用vue3打造一个物料库
vue完美实现el-table列宽自适应
关于Vue Router的10条高级技巧总结
May 06 #Vue.js
You might like
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
php中利用explode函数分割字符串到数组
2014/02/08 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
angular4笔记系列之内置指令小结
2018/11/09 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
javascript实现日历效果
2019/06/17 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
Python的垃圾回收机制详解
2019/08/28 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
python调用win32接口进行截图的示例
2020/11/11 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
和平主题的演讲稿
2014/01/12 职场文书
护理专业自荐信范文
2014/02/26 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
阿凡达观后感
2015/06/10 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js