位置: IT常识 - 正文

ant-design-vue导航菜单a-menu的使用解读(vue导航方式)

编辑:rootadmin
这篇文章主要介绍了ant-design-vue导航菜单a-menu的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 目录

推荐整理分享ant-design-vue导航菜单a-menu的使用解读(vue导航方式),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ant-design-vue教程,ant-design-vue教程,ant-design-vue导航点击没有选中,vue 导航,ant-design-vue导航菜单动态渲染,vue 导航,ant-design-vue导航点击没有选中,ant-design-vue导航菜单动态渲染,内容如对您有帮助,希望把文章链接给更多的朋友!

一、效果二、关键的API三、注意事项四、代码

此文章包含了递归生成三级菜单,刷新状态保留,只展开一个父级菜单等常见问题。

一、效果

可以看到递归生成三级菜单,刷新状态保留,只展开一个父级菜单等常见问题得以解决。我自己的电脑设备老旧,反应缓慢的问题请忽略。

二、关键的API

说实话遇到问题了不知道该怎么解决,说白了还是不懂得API的使用,对相关的API不够了解,熟悉了API怎么操作都行。下面说说用到但是又容易混淆的API。

1.defaultSelectedKeys 默认选中的key

ant-design-vue导航菜单a-menu的使用解读(vue导航方式)

这里的key对应的是a-menu-item上面绑定的key,如果被选中,会进行导航的跳转以及被给予高亮状态。

2.openKeys 展开的a-sub-menu的key

这里的key对应的是a-sub-menu上面绑定的key。如果绑定在a-menu上,对应的子菜单会打开。

3.selectedKeys 受控选中的key

这里的key对应的是a-menu-item上面绑定的key,如果被选中,会进行导航的跳转以及被给予高亮状态。

与defaultSelectedKeys 有什么区别:

这两个属性为二选一使用,如果同时使用时,defaultSelectedKeys无效,将会以selectedKeys为准。如果你只是希望指定一个初始化选中的菜单项,请使用defaultSelectedKeys;如果你需要每次通过传入不同的props改变Menu组件的选中项,请使用selectedKeys。三、注意事项

此处强调一点,如果是一级以及二级菜单的生成,普通的两层for循环结合递归以及v-if生成即可。

如果是想使用a-menu生成三级或者三级以上的菜单,那么就需要定义在单文件内定义函数式组件。那为什么不推荐单文件的形式定义组件,而是使用函数式组件?

以下是官方文档的说明:

四、代码<template><a-layout id="components-layout-demo-custom-trigger"><a-layout-sider theme="light" v-model="collapsed" :trigger="null" collapsible><div ><a-menu:inlineIndent="inlineIndent":defaultSelectedKeys="[$route.path]":openKeys="openKeys"mode="inline":inline-collapsed="collapsed"@openChange="onOpenChange"@click="menuClick"><!-- 菜单遍历的开始 --><template v-for="item in list"><!-- 如果当前遍历项没有children,视为子菜单项,注意所有的key都是path用于路由跳转,以及当前选中记录 --><a-menu-item v-if="!item.children" :key="item.path"><i :class="item.icon" /><span>{{ item.title }}</span></a-menu-item><!-- 否则视为子菜单,传入菜单信息并且运用下面定义的函数式组件 --><sub-menu v-else :key="item.path" :menu-info="item" /></template></a-menu></div></a-layout-sider><a-layout><a-layout-content :style="{ margin: '24px 16px', padding: '24px', background: '#fff', minHeight: '280px' }"><router-view/></a-layout-content></a-layout></a-layout></template><script>import { Menu } from 'ant-design-vue';// 定义函数式组件const SubMenu = {template: `<a-sub-menu :key="menuInfo.path" v-bind="$props" v-on="$listeners"><span slot="title"><i :class="menuInfo.icon" /><span>{{ menuInfo.title }}</span></span><template v-for="item in menuInfo.children"><a-menu-item v-if="!item.children" :key="item.path"><i :class="item.icon" /><span>{{ item.title }}</span></a-menu-item><sub-menu v-else :key="item.path" :menu-info="item" /></template></a-sub-menu>`,name: 'SubMenu',// must add isSubMenu: true 此项必须被定义isSubMenu: true,props: {// 解构a-sub-menu的属性,也就是文章开头提到的为什么使用函数式组件...Menu.SubMenu.props,// 接收父级传递过来的菜单信息menuInfo: {type: Object,default: () => ({}),},},};export default {data() {return {// 菜单缩进inlineIndent:12,// 默认不折叠collapsed: false,// 全部顶级父节点,用来控制所有父级菜单只展开其中的一项,可用遍历菜单信息进行赋值rootSubmenuKeys: ['/infomationManage','/safeInfoManage','/qualityInfoManage'],// 展开的父菜单项openKeys: [],// 选中的子菜单项defaultSelectedKeys: [this.$route.path],// 菜单信息,可从后台获取list: [{key: '1',title: '项目信息管理',path: '/infomationManage',icon:'iconfont icon-information'},{key: '2',title: '安全信息管理',path: '/safeInfoManage',icon:'iconfont icon-anquan',children: [{key: '2.1',title: '安全风险管理',path: '/safeRisk',icon:'',children: [{key: '2.1.1',title: '风险分类管理',path: '/riskClassifyManage',icon:'',},{key: '2.1.2',title: '分类辨识',path: '/classifyIdentity',icon:'',}],},],},{key: '3',title: '质量信息管理',path: '/qualityInfoManage',icon:'iconfont icon-zhiliang',children:[{key: '3.1',title: '质量控制点管理',path: '/controlPointManage',icon:'',}]}],}},created(){// 将从缓存中取出openKeysconst openKeys = window.sessionStorage.getItem('openKeys')if(openKeys){// 存在即赋值this.openKeys = JSON.parse(openKeys)}},methods: {// 点击菜单,路由跳转,注意的是当点击MenuItem才会触发此函数menuClick({ item, key, keyPath }) {// 获取到当前的key,并且跳转this.$router.push({path: key})},onOpenChange(openKeys) {// 将当前打开的父级菜单存入缓存中window.sessionStorage.setItem('openKeys', JSON.stringify(openKeys))// 控制只打开一个const latestOpenKey = openKeys.find(key => this.openKeys.indexOf(key) === -1);if (this.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {this.openKeys = openKeys;} else {this.openKeys = latestOpenKey ? [latestOpenKey] : [];}},},// 注册局部组件components: {'sub-menu': SubMenu,},};</script><style></style>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

本文链接地址:https://www.jiuchutong.com/zhishi/311725.html 转载请保留说明!

上一篇:java初始化变量的注意点(java变量初始化的两种方式)

下一篇:ajax - 接口、表单、模板引擎(ajax写接口)

  • 苹果手机丢了怎么找到手机所在位置(苹果手机丢了怎么锁机)

    苹果手机丢了怎么找到手机所在位置(苹果手机丢了怎么锁机)

  • 美团电影票能退票吗(美团电影票能退一张吗)

    美团电影票能退票吗(美团电影票能退一张吗)

  • 抖音直播能和粉丝连麦吗(抖音主播和粉丝)

    抖音直播能和粉丝连麦吗(抖音主播和粉丝)

  • vivo x27耳机接口在哪(vivox27耳机插孔)

    vivo x27耳机接口在哪(vivox27耳机插孔)

  • 三星s8外屏玻璃裂了(三星s8外屏玻璃裂了会有什么影响)

    三星s8外屏玻璃裂了(三星s8外屏玻璃裂了会有什么影响)

  • word中如何设置中文字体和西文的字体(word中如何设置不同的页眉)

    word中如何设置中文字体和西文的字体(word中如何设置不同的页眉)

  • 电脑红屏怎么办恢复(电脑红屏怎么办?一分钟教你修好)

    电脑红屏怎么办恢复(电脑红屏怎么办?一分钟教你修好)

  • iphone11能不能用pencil(iphone11能不能用12的手机壳)

    iphone11能不能用pencil(iphone11能不能用12的手机壳)

  • 荣耀7x屏幕翘起能不能粘上(荣耀屏幕翘起来了)

    荣耀7x屏幕翘起能不能粘上(荣耀屏幕翘起来了)

  • iphone11pro和11pro max区别(iphone11pro和11promax买哪个好)

    iphone11pro和11pro max区别(iphone11pro和11promax买哪个好)

  • qq开了录音权限设还说不了话(qq开了录音权限怎么开)

    qq开了录音权限设还说不了话(qq开了录音权限怎么开)

  • 手机4g怎么变成2g了(手机4g怎么变成5g)

    手机4g怎么变成2g了(手机4g怎么变成5g)

  • 计算器off是什么健(计算器off是什么键ac)

    计算器off是什么健(计算器off是什么键ac)

  • ps怎么描线(ps怎么描线抠图)

    ps怎么描线(ps怎么描线抠图)

  • wpsppt动画触发器怎么设置(ppt的动画触发器)

    wpsppt动画触发器怎么设置(ppt的动画触发器)

  • 电脑微信怎么视频不了(电脑微信怎么视频录制)

    电脑微信怎么视频不了(电脑微信怎么视频录制)

  • 微信二维码收款码怎么关闭(微信二维码收款语音播报怎么弄)

    微信二维码收款码怎么关闭(微信二维码收款语音播报怎么弄)

  • 如何获得大众点评的d币(如何获得大众点评优质点评)

    如何获得大众点评的d币(如何获得大众点评优质点评)

  • 苹果手机酷狗怎么设置桌面歌词(苹果手机酷狗怎么开通不了会员)

    苹果手机酷狗怎么设置桌面歌词(苹果手机酷狗怎么开通不了会员)

  • vivo的分辨率在哪设置(vivo手机分辨率在哪里调)

    vivo的分辨率在哪设置(vivo手机分辨率在哪里调)

  • apple watch2和3的区别(apple watch 2和3有什么区别)

    apple watch2和3的区别(apple watch 2和3有什么区别)

  • 无线网一会连上一会断(无线网一会连上一会断了)

    无线网一会连上一会断(无线网一会连上一会断了)

  • 魅族16是不是16th(魅族16是不是超声波指纹)

    魅族16是不是16th(魅族16是不是超声波指纹)

  • wds未开启什么意思(wds未开启怎么弄)

    wds未开启什么意思(wds未开启怎么弄)

  • 无法找到脚本文件解决方法(无法找到脚本文件c:\windows\system32)

    无法找到脚本文件解决方法(无法找到脚本文件c:\windows\system32)

  • 小程序和公众号相互跳转(小程序和公众号可以同名吗)

    小程序和公众号相互跳转(小程序和公众号可以同名吗)

  • 临时用工费账务怎么处理
  • 成本计算账户期末一般有余额吗
  • 待摊费用属于企业的费用
  • 电子承兑汇票贴现流程
  • 职工福利费专票账务处理
  • 小规模纳税检查怎么做
  • 开发间接费属于期间费用吗
  • 结转库存商品会计分录
  • 对公网银支付方式可以选哪些
  • 幼儿园收到政府补贴收入会计分录
  • 多层股权结构设计控制法
  • 公司罚款作为一种对过错方式的处罚
  • 小规模纳税人一个季度多少免税
  • 税务局开具无违规证明
  • 公司的钱怎么提现
  • 几种更正法
  • 收到个人缴纳的办证费
  • 预付股权转让款如何处理
  • 广告业的其他应收款包括哪些?
  • 1697511149
  • 债券分期还本利息怎么算
  • 资产负债率如何评价
  • 权益法下的相关税费计入
  • 收到收据的会计分录
  • 增值税专用发票有几联?
  • php缓存优化
  • exe是什么进程
  • 进程核心栈
  • 普通发票红冲需要填信息表吗
  • 固定资产清理如何结转
  • 一般纳税人增值税减免政策2023
  • 自产产品用于应税项目为什么不考虑偷税
  • 如何快速使用验证码
  • php curl_setopt
  • php读取文件内容
  • 企业所得税的计算公式三种
  • 小微企业能申请留抵退税吗?
  • 现金流量表中有应收账款吗
  • 公司负担个人所得税如何做账
  • 对外捐赠的会计处理企业会计准则和小企业会计准则
  • 怎么用java写代码
  • 实际发生坏账损失不影响应收账款
  • 递延收益核算哪些内容
  • 文化事业建设费报告表
  • 安装sql server 2008提示重新启动计算机
  • 发票丢失一张罚款标准
  • 商品互换定义
  • 公司支付员工工资方式有几种
  • 装修公司让客户承担税费是否合理
  • 开发成本存货怎么算
  • 提取安全生产费用是什么意思
  • 总公司给分公司拨款怎么做账
  • 研发费用如何做账
  • 借方是收入还是支出损益类
  • 小规模纳税人每个季度超过了30万怎么办
  • 专用发票附加税怎么算
  • 会计凭证要保存多少年企业注销
  • sqlserver数据库最快存储时间
  • sql高级写法
  • windows update更新卡住不动了
  • ubuntu16设置启动项
  • windows8自动开机
  • windows超级管理员默认密码
  • google chrome windows 10
  • linux的run目录放什么文件
  • qdcsfs.exe - qdcsfs是什么进程 有何作用
  • 错误代码0x8007007B
  • wind10升级
  • win8自启动在哪儿设置
  • 如何禁用系统
  • 基于socket的聊天程序
  • fragment的context
  • python函数设置
  • Python制作钟表代码
  • 服务端测试是什么意思
  • 个人所得税发票
  • 广东税务APP实名可以注册两个吗?
  • 电子税务局用户名和密码是什么
  • 公司被分立,应将分立后的单位
  • 提高增值税税率是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设