关于antd-vue a-menu菜单绑定路由的相关问题
作者:晚上八点半 发布时间:2023-07-02 16:33:12
标签:antd-vue,a-menu菜单,路由
tips: 路由绑定、菜单跳转、网页后退高亮显示
1. 问题描述
使用antd-vue 的 a-layout布局和a-menu菜单做一个侧边栏菜单,加入vuex配置侧边栏点击事件,实现点击菜单改变路由展示中间部分内容的功能
但是出现了问题:
重复点击路由报错
浏览器刷新/后退 菜单高亮区域没有根据路由的变化产生变化
2. 解决方法
对路由变化进行判断/修改router 的push与replace方法
借助a-menu 的属性::selectedKeys绑定路由地址,就能实现随着路由产生变化
3. 代码
****** 重复点击报错解决:******
方法1:对路径进行判断
methods: {
handelClick(item) {
//判断点击路径与点击菜单路径是否不同
//有效避免重复替换相同路径
if (item.key !== this.$route.path) {
this.$router.push(item.key)
console.log(this.$route.path)
console.log(item)
}
}
}
方法2:在main.js中添加代码
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const originalReplace = VueRouter.prototype.replace;
VueRouter.prototype.replace = function replace(location) {
return originalReplace.call(this, location).catch(err => err);
};
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err)
}
****** 浏览器刷新/后退 菜单高亮区域:******
完整代码:
<template>
<a-layout id="components-layout-demo-custom-trigger">
<a-layout-sider v-model="collapsed" :trigger="null" collapsible>
<div class="logo" />
<a-menu theme="dark"
mode="inline"
@click="handelClick"
:selectedKeys="[$route.path]"
>
<a-menu-item key='/register'>
<a-icon type="user" />
<span>注册</span>
</a-menu-item>
<a-menu-item key='/login'>
<a-icon type="login" />
<span>登录</span>
</a-menu-item>
<a-menu-item key='/modify'>
<a-icon type="reload" />
<span>忘记密码</span>
</a-menu-item>
</a-menu>
</a-layout-sider>
<a-layout>
<a-layout-header style="background: #fff; padding: 0">
<a-icon
class="trigger"
:type="collapsed ? 'menu-unfold' : 'menu-fold'"
@click="() => (collapsed = !collapsed)"
/>
<span>登录注册模块</span>
</a-layout-header>
<a-layout-content
:style="{ margin: '24px 16px', padding: '24px', background: '#fff', minHeight: '280px' }"
>
<router-view></router-view>
</a-layout-content>
</a-layout>
</a-layout>
</template>
<script>
export default {
name: 'Body',
data() {
return {
collapsed: false
};
},
mounted() {
this.$router.push('/register')
},
methods: {
handelClick(item) {
if (item.key !== this.$route.path) {
this.$router.push(item.key)
//console.log(this.$route.path)
//console.log(item)
}
}
}
}
</script>
<style>
#components-layout-demo-custom-trigger {
height: 100%;
}
#components-layout-demo-custom-trigger .trigger {
font-size: 18px;
line-height: 64px;
padding: 0 24px;
cursor: pointer;
transition: color 0.3s;
}
#components-layout-demo-custom-trigger .trigger:hover {
color: #1890ff;
}
#components-layout-demo-custom-trigger .logo {
height: 32px;
background: rgba(255, 255, 255, 0.2);
margin: 16px;
}
</style>
关键代码:
<a-menu theme="dark"
mode="inline"
:default-selected-keys="['1']"
@click="handelClick"
:selectedKeys="[$route.path]"
>
<a-menu-item key='/register'>
<a-icon type="user" />
<span>注册</span>
</a-menu-item>
/**
*在a-menu中设置的:selectedKeys="key",绑定当前的路由"[$route.path]"
*所以在a-menu-item的key需要做出改变,改为路径
*同时也方便了后续处理点击事件传入的路径
*/
顺便说下菜单的点击事件:
上面好像说了
演示结果:
来源:https://blog.csdn.net/weixin_45259917/article/details/120131112


猜你喜欢
- python 字符串切割 maxsplitmy_str.split(str1, maxsplit)str1 可以不写,默认是空白字符(&qu
- 一、简介Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且还表现在其良好的可扩展性上,正因如此,Python已
- 本文实例展示了Python Tkinter基础控件的用法,分享给大家供大家参考之用。具体方法如下:# -*- coding: utf-8 -
- 一、Eclipse 的安装Eclipse的安装是很容易的。Eclipse是基于java的一个应用程序,因此需要一个java的运行环境(JRE
- 由于javascript是一种无类型语言,所以一个数组的元素可以具有任意的数据类型,同一个数组的不同元素可以具有不同的类型,数组的元素设置可
- JavaScript中访问节点对象的方法有哪些? var obj = document.getElementById('fdafda
- 在Python中,数据存储方式分为同步存储和异步存储。同步写入速度比较慢,而爬虫速度比较快,有可能导致数据保存不完整,一部分数据没有入库。而
- 出自:【孟宪会之精彩世界】 发布日期:2005年1月27日 8点48分0秒 [有删改] 由于某些原
- 线性回归是机器学习中的基础算法之一,属于监督学习中的回归问题,算法的关键在于如何最小化代价函数,通常使用梯度下降或者正规方程(最小二乘法),
- 一、下载instant client1.附链接:http://www.oracle.com/technetwork/topics/winx6
- 对于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间。而且经常出现下载后安装出错问题。所以把PIP
- 一、CONCAT函数concat函数是将多个字段或字符串拼接为一个字符串;但是字符串之间没有任何分隔。concat函数官方介绍-- CONC
- 有两种方法当知道字典的键时:unit_rooms={ 3:{301:[1,80],302:[1,80],303:[2,90],304:[2,
- 本文以实例形式讲述了Python中replace方法,很有实用价值,具体如下:replace方法主要有两种:last_date = &quo
- JS添加/删除事件在IE和支持dom浏览器分别为:attachEvent(ie中的添加事件),detachEvent(ie中的删除事件),a
- 有时候我们需要将一个对象的某些属性选取出来,比方说我们有一个用数组表示的数据库表,我们需要一些函数来 select (选取) 几个字段:fu
- 本文实例讲述了Python自动连接ssh的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/python#-*- codi
- 前言除了数字,Python中最常见的数据类型就是字符串,无论那种编程语言,字符串无处不在。例如,从用户哪里读取字符串,并将字符串打印到屏幕显
- 前言SQL Server开发过程中,为了传入数据集类型的变量(比如接受C#中的DataTable类型变量),需要定义“用户自定义表类型”,通
- 如果你细心跟踪一下SQL Server数据库服务器的登录过程,你会发现口令计算其实是非常脆弱的,SQL Server数据库的口令脆弱体现两方