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 相关文章推荐
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
如何封装Vue Element的table表格组件
Feb 06 Vue.js
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
vue ref如何获取子组件属性值
Mar 31 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 Vue.js
vue3不同环境下实现配置代理
May 25 Vue.js
Vue通过懒加载提升页面响应速度
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
如何使用vue3打造一个物料库
vue完美实现el-table列宽自适应
关于Vue Router的10条高级技巧总结
May 06 #Vue.js
You might like
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
基于jQuery的自动完成插件
2011/02/03 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
Python交换变量
2008/09/06 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
python之生成多层json结构的实现
2020/02/27 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
性能服装:HYLETE
2018/08/14 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
英语国培研修感言
2014/02/13 职场文书
学校欢迎标语
2014/06/18 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
mysql如何查询连续记录
2022/05/11 MySQL
Spring Boot实现文件上传下载
2022/08/14 Java/Android