位置: 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写接口)

  • 这首歌唱给你听我想请你闭上眼睛歌词(这首歌唱给你听我想请你闭上眼睛)(至少还有这首歌唱给你听)

    这首歌唱给你听我想请你闭上眼睛歌词(这首歌唱给你听我想请你闭上眼睛)(至少还有这首歌唱给你听)

  • 支付宝信用分最高分是多少(怎么看信用分)

    支付宝信用分最高分是多少(怎么看信用分)

  • 抖币怎么转给另外一个号(抖币怎么转让给别人)

    抖币怎么转给另外一个号(抖币怎么转让给别人)

  • 微信怎么设置视频打不进来(微信怎么设置视频来电铃声)

    微信怎么设置视频打不进来(微信怎么设置视频来电铃声)

  • 华为mate30pro闪光灯下的白点是什么东西(华为mate30Pro闪光灯怎么能不闪烁呢)

    华为mate30pro闪光灯下的白点是什么东西(华为mate30Pro闪光灯怎么能不闪烁呢)

  • 荣耀x10max是升降摄像头的吗(荣耀x10手机是升降摄像头吗)

    荣耀x10max是升降摄像头的吗(荣耀x10手机是升降摄像头吗)

  • cpu风扇弹簧螺丝拧不上(cpu风扇弹簧螺丝怎么拆)

    cpu风扇弹簧螺丝拧不上(cpu风扇弹簧螺丝怎么拆)

  • me280cha是mini几代(me280zp/a是哪一年的)

    me280cha是mini几代(me280zp/a是哪一年的)

  • 微信浏览有痕迹在哪(微信浏览痕迹他人可看吗)

    微信浏览有痕迹在哪(微信浏览痕迹他人可看吗)

  • 键盘确定键是哪一个(键盘确定键坏了怎么办)

    键盘确定键是哪一个(键盘确定键坏了怎么办)

  • 华为手机背面的标签可以撕吗(华为手机背面的玻璃外壳碎了)

    华为手机背面的标签可以撕吗(华为手机背面的玻璃外壳碎了)

  • vivoy66长宽高多少(vivoy66尺寸多大)

    vivoy66长宽高多少(vivoy66尺寸多大)

  • 手机号导入包裹啥意思(手机号导入包裹怎么弄)

    手机号导入包裹啥意思(手机号导入包裹怎么弄)

  • 打不开该网页因为已丢失网络链接(打不开该网页因为已丢失)

    打不开该网页因为已丢失网络链接(打不开该网页因为已丢失)

  • 华为nova6支持分屏么(华为nova6有没有分屏功能)

    华为nova6支持分屏么(华为nova6有没有分屏功能)

  • novideoinput无法开机(nova compute启动不了)

    novideoinput无法开机(nova compute启动不了)

  • 天猫定金退货能退吗(天猫定金退货能退多少钱)

    天猫定金退货能退吗(天猫定金退货能退多少钱)

  • windows7常用附件有哪些(win7常用的附件)

    windows7常用附件有哪些(win7常用的附件)

  • ie浏览器怎么截屏(ie浏览器怎么截图)

    ie浏览器怎么截屏(ie浏览器怎么截图)

  • 拼多多的省钱月卡怎么取消(拼多多的省钱月卡)

    拼多多的省钱月卡怎么取消(拼多多的省钱月卡)

  • 红米note8pro怎么开启定位(红米note8pro怎么样)

    红米note8pro怎么开启定位(红米note8pro怎么样)

  • 抖音文案怎么写吸引人(中考结束抖音文案怎么写)

    抖音文案怎么写吸引人(中考结束抖音文案怎么写)

  • s10呼吸灯如何开启(s10 呼吸灯)

    s10呼吸灯如何开启(s10 呼吸灯)

  • win10桌面图标怎么隐藏(win10桌面图标怎么随意摆放)

    win10桌面图标怎么隐藏(win10桌面图标怎么随意摆放)

  • vue项目关于iframe嵌套的页面,在切换tab标签时会被重新刷新的问题处理方案(vue的iframe)

    vue项目关于iframe嵌套的页面,在切换tab标签时会被重新刷新的问题处理方案(vue的iframe)

  • JavaScript数组(四):判断数组相等的4种方法

    JavaScript数组(四):判断数组相等的4种方法

  • ps调整边缘(ps调整边缘在哪里快捷键)

    ps调整边缘(ps调整边缘在哪里快捷键)

  • 海关对哪些物品有出入境的限制规定
  • 职工旅游不计入福利费
  • 支付所得税的会计处理
  • 借款入账会计分录
  • 小规模纳税人增值税优惠政策
  • 积分兑换开始啦
  • 劳务报酬现金 过账
  • 半成品算原材料吗
  • 小规模纳税人按1%征收增值税
  • 现金流量表年报期末现金余额
  • 外出经营预缴税款,回所在地如何申报
  • 预付账款发票到货未到怎么做账
  • 发票密码区出格了怎么调整
  • 短期借款的明细科目是什么
  • 税务机关代码不能为空怎么解决
  • 增值税发票和收据的区别
  • 事业单位 年终
  • 建筑工程分包怎么纳税
  • 增值税漏洞
  • 可以用鸿蒙系统的手机
  • 手工明细分类账本怎么记
  • 员工的餐费补助怎么算
  • 员工的出差补贴计入什么科目
  • mmc.exe是什么进程
  • macOS Big Sur 11.2 开发者预览版 Beta如何更新?
  • php数组函数 菜鸟
  • 外贸企业代理出口销售的出口退税手续
  • file*fp什么意思
  • php目录操作
  • 解决办法总比困难多
  • 黄金期货交易进场规则
  • 结转销售原材料会计分录
  • 申请一般纳税人流程
  • 增值税减免附加税怎么处理
  • 小企业如何记账
  • 联邦学习(FL)+差分隐私(DP)
  • 航天金税盘发票作废流程视频
  • 常用激活函数及其导数
  • php开发程序
  • python迭代器iterator
  • phpstudy修改php版本
  • 平价转让股权怎么交企业所得税
  • 接待客人的场合
  • 企业贷款利息可以开发票吗
  • index.php备份文件
  • python有public
  • 平行结转分步法的特点
  • 专利银行汇款操作步骤
  • 银行日记账期初余额写哪儿
  • sqlserver2008导出表结构和表数据
  • 进销存有什么用
  • 以前年度损益调整
  • 固定资产改良支出
  • 材料盘盈如何入账
  • 认证失败,未获取到区域信息
  • 小企业会计制度废止
  • 暂估成本以后也没有票回来了
  • 长期股权投资损益调整
  • 工程保险费包括人身保险么
  • 滞纳金在年报的营业外支出的哪一项?
  • 附条件的行政行为有哪些
  • sql数据库死锁产生的原因及解决方案
  • sql server的go
  • sql合并多行到一列
  • win8中文版是什么版本
  • ubuntu16.04怎么设置网络
  • mac如何查看隐藏的文件夹
  • emule.td文件怎么打开
  • mac nums
  • Shell脚本监控日志 出现关键字 grep提醒
  • 学习标准——笔记
  • cocos设置中文
  • JavaScript的strict模式与with关键字介绍
  • android EditText 需要输入文本时调不出来软键盘 解决方案(亲测有效)
  • angular的排序管道
  • 搭建简单的spike课程
  • javascript基础书
  • javascript要学到什么程度
  • 福建省茶叶协会会长名单
  • 尾矿治理文件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设