elementui NavMenu导航菜单在路由跳转失败后,active样式仍按跳转后的路径显示
问题描述:
点击导航栏时,如果当前页面内容仍在播放,则先确认是否跳转,若确认跳转则执行xxx关闭播放再进行跳转;若取消跳转,则不进行跳转。此时出现问题:取消跳转后虽然实际并未跳转,但导航栏active样式已经生效到点击项。

路由跳转前代码如下:
1 beforeRouteLeave(to, from, next) { 2 if (this.isStart) { 3 this.$confirm('当前有场景正在回放,是否切换页面?', '提示', { 4 confirmButtonText: '确定', 5 cancelButtonText: '取消', 6 type: 'warning' 7 }) 8 .then(() => { 9 if (this.xlname == '') return; 10 this.order = 3; 11 this.suspend = 3; 12 this.startStop = 1; 13 this.startStopicon = require('@/assets/img/video/pause.png'); 14 this.isSuspend = !this.isSuspend; 15 var param = { 16 id: this.activeId, 17 order: this.order, 18 rate: this.rate, 19 startTime: this.startTime, 20 type: 2 21 }; 22 window.localStorage.setItem('replay', JSON.stringify(param)); 23 replay(param).then((res) => { 24 if (res.code === 200) { 25 debugger; 26 next(); 27 } 28 }); 29 }) 30 .catch(() => { 31 console.log('@@@'); 32 //bus.$emit('deilverTitle', 'xxxx'); 33 }); 34 } else { 35 next(); 36 } 37 },
解决方法:
1、首先尝试更改导航栏中active属性在哪项中,但效果不对
2、直接替换active属性,将active对应样式修改成普通样式,再加isSelected属性来重新标志当前选中项,代码如下:
1 <div class="sidebar"> 2 <el-menu 3 class="sidebar-el-menu" 4 :default-active="onRoutes" 5 :collapse="collapse" 6 background-color="#0c1119" 7 text-color="#fff" 8 active-text-color="#fff" 9 router 10 > 11 <template v-for="item in items"> 12 <template v-if="item.subs"> 13 <el-submenu :index="item.index" :key="item.index"> 14 <template slot="title"> 15 <i :class="item.icon"></i> 16 <span slot="title">{{ item.title }}</span> 17 </template> 18 <template v-for="subItem in item.subs"> 19 <el-submenu v-if="subItem.subs" :index="subItem.index" :key="subItem.index"> 20 <template slot="title">{{ subItem.title }}</template> 21 <el-menu-item v-for="(threeItem, i) in subItem.subs" :key="i" :index="threeItem.index" :class="threeItem.index==onRoutes?'isSelected':''">{{ 22 threeItem.title 23 }}</el-menu-item> 24 </el-submenu> 25 <el-menu-item v-else :index="subItem.index" :key="subItem.index" :class="subItem.index==onRoutes?'isSelected':''">{{ subItem.title }}</el-menu-item> 26 </template> 27 </el-submenu> 28 </template> 29 <template v-else> 30 <el-menu-item :index="item.index" :key="item.index" :class="item.index==onRoutes?'isSelected':''"> 31 <i :class="item.icon"></i> 32 <span slot="title">{{ item.title }}</span> 33 </el-menu-item> 34 </template> 35 </template> 36 </el-menu> 37 </div>
1 .isSelected { 2 background: linear-gradient(90deg, #4b83b1 5%, rgb(33, 36, 49) 70%) !important; 3 color:rgb(161, 183, 217) !important; 4 }
1 computed: { 2 onRoutes() { 3 return this.$route.path.replace('/', ''); 4 } 5 },
onRoutes用来获取当前路径,与比较菜单路径判定isSelected。
浙公网安备 33010602011771号