【Ant Design Vue 】之Menu菜单
文章目录
- 常用属性
- 常用事件
- 递归嵌套多级菜单
- 效果
版本
ant-design-vue
:"^1.7.4"
,
常用属性
属性 | 说明 | 默认值 |
---|---|---|
mode | 菜单类型,现在支持垂直、水平、和内嵌模式三种 |
vertical
|
inlineCollapsed |
inline 时菜单是否收起状态
|
|
theme |
主题颜色(light /dark )
|
light
|
openKeys(.sync) |
当前展开的 SubMenu 菜单项 key 数组
|
|
defaultOpenKeys |
初始展开的 SubMenu 菜单项 key 数组
|
|
selectedKeys(v-model) |
当前选中的菜单项 key 数组
|
|
defaultSelectedKeys |
初始选中的菜单项 key 数组
|
说明
defaultSelectedKeys
是默认选中的key
(a-menu-item
上绑定的key
),被选中会有高亮的显示效果;selectedKeys
也是一样的作用,不要同时使用,区别在于如果只希望指定一个初始化的菜单选项就使用defaultSelectedKeys
,如果需要通过自己修改数据来选中菜单的选中项就使用selectedKeys
。
(openKeys
和defaultOpenKeys
也是同理)
常用事件
openChange
是Menu
的事件,SubMenu
展开/关闭的回调
递归嵌套多级菜单
若只有两级菜单则直接使用v-for
和v-if
指令即可完成;若菜单级数≥3则需要使用函数式组件
。具体原因官网已经做了说明:
Before v2.0, 因组件内部会动态更改
a-sub-menu
的属性,如果拆分成单文件,无法将属性挂载到a-sub-menu
上,你需要自行声明属性并挂载。为了方便,避免属性的声明,我们推荐使用函数式组件。
代码
App.vue
(测试就随便在App.vue
里写了)
<template><div id="app"><div style="width: 256px"><a-button type="primary" style="margin-bottom: 16px" @click="toggleCollapsed"><a-icon :type="collapsed ? 'menu-unfold' : 'menu-fold'" /></a-button><a-menu:defaultSelectedKeys="[$route.path]":openKeys="openKeys"mode="inline"theme="dark":inline-collapsed="collapsed"@openChange="onOpenChange"@click="menuClick"><template v-for="item in list"><a-menu-item v-if="!item.children" :key="item.path"><a-icon type="pie-chart" /><span>{{ item.title }}</span></a-menu-item><sub-menu v-else :key="item.path" :menu-info="item" /></template></a-menu></div><router-view/></div>
</template><script>
import { Menu } from 'ant-design-vue';
const SubMenu = {template: `<a-sub-menu :key="menuInfo.key" v-bind="$props" v-on="$listeners"><span slot="title"><a-icon type="mail" /><span>{{ menuInfo.title }}</span></span><template v-for="item in menuInfo.children"><a-menu-item v-if="!item.children" :key="item.path"><a-icon type="pie-chart" /><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,// Cannot overlap with properties within Menu.SubMenu.propsmenuInfo: {type: Object,default: () => ({}),},},
};export default {name: "App",components: {'sub-menu': SubMenu,},data() {return {collapsed: false,openKeys: [],rootSubmenuKeys: ['/user'],list: [{key: '1',title: '信息管理',path: '/info',},{key: '2',title: '用户管理',path: '/user',children: [{ key: '2.1',title: '后台用户',path: '/adminUser',children: [{ key: '2.1.1',title: '新增用户',path: '/addAdminUser',children: [{key: '2.1.1。1',title: '用户xx',path: '/addAdminUserXX',}]}]},{ key: '2.2',title: '前台用户',path: '/frontUser',}]}],};},created(){const openKeys = window.sessionStorage.getItem('openKeys')if(openKeys){this.openKeys = JSON.parse(openKeys)}},methods: {toggleCollapsed() {this.collapsed = !this.collapsed;},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] : [];}},menuClick({key}) {// 获取到当前的key,并且跳转this.$router.push({path: key})},}
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;padding: 50px;
}
</style>
这里省略了router
配置,相信在座的各位也会!(不会的底下留言,包教包会!)
如果
vue
报编译错误You are using the runtime-only build of Vue
,可以在vue的配置文件里加一行runtimeCompiler: true
,重新运行即可。
如果点击同一个菜单报错了NavigationDuplicated: Avoided redundant navigation to current location
,需要修改下Router
设置(router/index.js
):
const originalPush = Router.prototype.push
Router.prototype.push = function push(location) {return originalPush.call(this, location).catch(err => err)
}
效果
自动渲染多级嵌套菜单;刷新会保存选中的菜单;点击菜单,收起其他展开的所有菜单。
【Ant Design Vue 】之Menu菜单相关推荐
- Ant Design Vue 切换中英文改变Menu和内容
前言,目前一个小项目使用的是Ant Design Vue,情况是 路由从接口获取并渲染到页面上,切换国际化语言时,Menu 和 内容 都中英文自动切换. Ant Design Vue 结构 Ant D ...
- ant design vue pro 支持多页签模式 页签可以缓存
ant design vue pro 支持多页签模式 页签可以缓存 代码贴在最后 启动之后页面是这样的: 第一步:修改 src/layouts/BasicLayout.vue 文件,在该文件中添加mu ...
- ant design vue table 高度自适应_Vue组件库大评测 Element, iView, HeyUI, Ant Design Vue
今天偶然的机会想了解下其他Vue相关的组件库,网上刚好有文章,顺便自己做一下笔记,算是资源整理吧 .好了,话不多说,直接开始: 组件库的选择对于前端开发有者至关重要的影响,而组件的丰富性以及健壮性是我 ...
- Vue3:基础项目UI框架PC端(Element ui,view-ui-plus,Ant Design Vue)
1.Element ui 文档已经更新至Vue3,可以放心使用,在使用Element ui的时候注意在使用弹性布局的时候,Element ui中的Table 表格会出现缩放无法自适应问题. 安装 $ ...
- 2019年 Vue 组件库大评测 Element, iView, HeyUI, Ant Design Vue
2018年我写的Vue组件库对比文档: https://juejin.im/post/5a9628415188257a7b5ac678 一年的时间,每一个组件库都有了更多的发展,Ant Design ...
- vite+vue3+ts+ant design vue+tailwindcss搭建前端web应用(2)
回顾 上篇文章地址:vite+vue3+ts+ant design vue+tailwindcss搭建前端web应用(1)_konsei的博客-CSDN博客 上篇文章搭建了vue3项目,引入了ant ...
- ant vue 设置中文_vue+Ant design vue做项目-Go语言中文社区
哈喽哈喽,这期带来蚂蚁金服的一个 Ant Design 的 Vue 实现. 样式还是很现代化的,嗯...现在是2019年9月17,对现在来说还很fashion过几年就不知道了. 话不多说直接上手,喜欢 ...
- 【Vue3】创建 vite + vue3 + Ant Design Vue 项目
搭建脚手架 创建项目: 然后按照它的指示运行项目 配置文件 安装构建 vue-router: npm i vue-router@next 创建 router/index.js 文件: import { ...
- 2019 Electron+Vue+Ant Design Vue仿网易云音乐windows客户端实战分享
特点 拖拽播放 桌面歌词 mini模式 自定义托盘右键菜单 任务栏缩略图,歌曲操作 音频可视化 自动/手动检查更新 Nedb数据库持久化 自定义安装路径,安装界面美化 浏览器中启动客户端 Travis ...
- Ant Design Vue Pro(V3.0.0 )MultiTab标签缓存,完美解决
使用Ant Design Vue Pro 基础框架都知道好用,但是MultiTab标签一直未解决(V3.0.0),最新版解决了但是要收费9K(2022-01-21日). 首先需要实现如下: Multi ...
最新文章
- java json设置编码_我们如何用Java编码JSON对象?
- python测试工程师招聘_招聘软件测试工程师,限女生
- 《雷达技术丛书》分享
- Spring/Spring MVC/Spring Boot自动装配机制介绍
- leetcode 459. 重复的子字符串(Java版)
- powershell新建python文件_powershell如何打开Python
- 使用ansible 批量分发SSH Key
- python 通过ip获取城市_python shell根据ip获取主机名代码示例
- mysql mvcc实例讲解_轻松理解MYSQL MVCC 实现机制
- SQL63 刷题通过的题目排名
- 关于学习web的自制roadmap
- Perl 语言流行度处于历史最低点
- 非常实用的“绿色电子地图”
- 智能音箱音效哪个好_四大智能音箱,你觉得哪个才是最好用的?
- 文件上传之黑名单绕过
- 缠论-2011.4.11晚
- c语言银行信用卡卡管理系统,自编自导多人多卡信用卡管理系统
- Java 实现 word 文档的在线签字盖章功能
- [ICCV 2017] Predicting Visual Exemplars of Unseen Classes for Zero-Shot Learning
- 【附代码】图像分类 — 测评指标
热门文章
- C++中的const变量和引用
- 提供非法计算机工具罪,提供非法侵入或者控制计算机信息系统的程序、工具罪...
- 辰皇怎么过鸿蒙,《诛仙网游》求个辰皇单刷鸿蒙的讲解攻略,视频最好
- 常州工学院数据结构作业 第8章 图
- 仿「ONE · 一个」 的微信小程序 - 每日一个
- KEIL5 中 .PACK文件的制作
- Pycharm中批量添加单引号,双引号的方法(爬虫Headers中批量加引号)
- 如何批量提取文件名到excel?
- 动态的GIF图怎么在电脑上制作
- Mac电脑终端程序如何切换shell命令?