antdesignVue递归导航菜单
手写版本
文件leftNav.vue
<template>
<!-- <a-switch:checked="theme === 'dark'"checked-children="Dark"un-checked-children="Light"@change="changeTheme"/> --><a-menu v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys" mode="inline":theme="theme"@click="handleClick"><template v-for="item in menuList"><a-sub-menu :key="item.id" @titleClick="titleClick" v-if="item.children"><template #icon><component :is="$antIcons[item.icon]" /></template><template #title>{{item.name + item.id}}</template><template :key="sitem.id" v-for="sitem in item.children"><a-menu-item v-if="!sitem.children">{{sitem.name}}</a-menu-item><!-- <a-menu-item v-else="!sitem.children">{{[sitem]}}</a-menu-item> --><leftNav :menuList="[sitem]" v-else /></template></a-sub-menu><a-menu-item :key="item.id" v-else><template #icon><component :is="$antIcons[item.icon]" /></template>{{item.name +item.id}}</a-menu-item></template></a-menu>
</template>
<script>import { defineComponent, reactive, toRefs } from 'vue';export default {components: {},setup() {const state = reactive({theme: 'dark',selectedKeys: ['1'],// openKeys: ['sub1'],});const changeTheme = checked => {state.theme = checked ? 'dark' : 'light';};return { ...toRefs(state),changeTheme,};},props:['menuList','ids'],// props: {// menuList: {// type: Object,// },// },methods: {changNav(item) {console.log(item.key)this.$router.push({path: item.key})this.selectedKeys = item.key},updateMenu() {const routes = this.$route.matched.concat()this.selectedKeys = [routes.pop().path]}},mounted() {},created() {},computed: {// 计算属性的 getterchildrenData: function() {// `this` 指向 vm 实例return '['+this.childrenObject+']'}}}
</script>
<style>.ant-menu-inline{height: 100%;}
</style>
官方版本
<template><div style="width: 256px"><a-button type="primary" style="margin-bottom: 16px" @click="toggleCollapsed"><MenuUnfoldOutlined v-if="collapsed" /><MenuFoldOutlined v-else /></a-button><a-menuv-model:openKeys="openKeys"v-model:selectedKeys="selectedKeys"mode="inline"theme="dark":inline-collapsed="collapsed"><template v-for="item in list" :key="item.key"><template v-if="!item.children"><a-menu-item :key="item.key"><template #icon><PieChartOutlined /></template>{{ item.title }}</a-menu-item></template><template v-else><sub-menu :key="item.key" :menu-info="item" /></template></template></a-menu></div>
</template>
<script>
import { defineComponent, ref } from 'vue';
import { MenuFoldOutlined, MenuUnfoldOutlined, PieChartOutlined, MailOutlined } from '@ant-design/icons-vue'; // you can rewrite it to a single file component, if not, you should config vue alias to vue/dist/vue.esm-bundler.jsconst SubMenu = {name: 'SubMenu',props: {menuInfo: {type: Object,default: () => ({}),},},template: `<a-sub-menu :key="menuInfo.key"><template #icon><MailOutlined /></template><template #title>{{ menuInfo.title }}</template><template v-for="item in menuInfo.children" :key="item.key"><template v-if="!item.children"><a-menu-item :key="item.key"><template #icon><PieChartOutlined /></template>{{ item.title }}</a-menu-item></template><template v-else><sub-menu :menu-info="item" :key="item.key" /></template></template></a-sub-menu>`,components: {PieChartOutlined,MailOutlined,},
};
const list = [{key: '1',title: 'Option 1',
}, {key: '2',title: 'Navigation 2',children: [{key: '2.1',title: 'Navigation 3',children: [{key: '2.1.1',title: 'Option 2.1.1',}],}],
}];
export default defineComponent({components: {'sub-menu': SubMenu,MenuFoldOutlined,MenuUnfoldOutlined,PieChartOutlined,},setup() {const collapsed = ref(false);const toggleCollapsed = () => {collapsed.value = !collapsed.value;};return {list,collapsed,toggleCollapsed,selectedKeys: ref(['1']),openKeys: ref(['2']),};},});
</script>
antdesignVue递归导航菜单相关推荐
- ant-design-vue导航菜单a-menu的详细使用
ant-design-vue导航菜单a-menu的详细使用 一.效果 一.关键的API 二.注意事项 三.代码 此文章包含了递归生成三级菜单,刷新状态保留,只展开一个父级菜单等常见问题. 一.效果 可 ...
- vue、Menu 导航菜单、Menu属性事件、vue Menu 全部导航菜单、vue Menu 全部属性事件
vue.Menu 导航菜单.Menu属性事件.vue Menu 全部导航菜单.vue Menu 全部属性事件 设计规则 何时使用 代码演示 顶部导航 内嵌菜单 缩起内嵌菜单 只展开当前父级菜单 垂直菜 ...
- 来自数据库的MVC 6动态导航菜单
目录 目标 介绍 使用的组件 创建Web项目 迁移 数据服务 导航菜单 接下来是什么 结论 Download source code - 977.3 KB 目标 几年前,我不得不从数据库加载导航菜单并 ...
- vue3.0+ts+element-plus多页签应用模板:侧边导航菜单(上)
目录 系列文章 一.先说点什么 二.从问题开始,侧边栏是干啥的? 三.封装组件之思路分析 四.封装菜单部分 1. MenuItem 2. ModuleMenu 系列文章 vue3.0+ts+eleme ...
- jQuery 插件开发——Menu(导航菜单)
故事背景:由于最近太忙了,已经很久没有写jquery插件开发系列了.但是凭着自己对这方面的爱好,我还是抽了一些时间来过一下插件瘾的.今天的主题是导航菜单,这个我相信不管做B/S还是做C/S都非常熟悉一 ...
- 使用vue-router自动生成导航菜单
当我们选用ElementUI作为页面开发的组件库,并打算创建一个如下的菜单表项: 如果我们采用 ElementUI 库中的 el-menu 组件来实现的话,效果会很不错,但是代码的画风可能是这样的: ...
- element ui 菜单封装_vue+element UI实现多级导航菜单
1.前言 在某次日常开发中,项目要求页面的导航菜单需要动态加载,即菜单不能在页面上写死,菜单上的数据由后端开发从数据库中获取返回给前端使用,前端拿到数据后再通过解析数据最终将菜单渲染出来.由于菜单有可 ...
- 导航条——收缩式导航菜单
1.概述 在网站中不仅可以设置导航条,而且还可以设置导航菜单.由于菜单内容比较多,同一页面显示比较杂乱,所以很多的设计者都采用了收缩式的菜单形式. 2.技术要点 本实例主要是应用JavaScript控 ...
- 基于jQuery垂直多级导航菜单代码
基于jQuery垂直多级导航菜单代码是一款黑色风格的jQuery竖直导航菜单特效下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <ul class="ce& ...
- 一款基于jquery和css3的响应式二级导航菜单
今天给大家分享一款基于jquery和css3的响应式二级导航菜单,这款导航是传统的基于顶部,鼠标经过的时候显示二级导航,还采用了当前流行的响应式设计.效果图如下: 在线预览 源码下载 实现的代码. ...
最新文章
- 你必须非常努力,才可以看起来毫不费力。
- MVC 多级目录菜单
- struts 文件下载
- 判断checkbox是否选中并改变值
- 海外投行抢滩大数据 人工智能等领域趋热
- oracle rac em cluster name,ORACLE 11G RAC重建EM问题
- opengl 安装_一步步学OpenGL(34) -《GLFX,一个OpenGL效果库》
- ECMAScript 6:更好的 Unicode 支持
- 配置VS2008本地调试.NETFRAMEWORK源代码
- oracle dba_tables degree default,oracle中如何将表的并行度设定为DEFAULT?如下:
- 关于 路标设置 的问题
- 微软面试58道逻辑面试题
- andriod studio 运行项目时没有NDK(Android Studio如何更改JDK和SDK或者DNK的路径)
- 计算机重启删除了应用怎么办,电脑文件被删除怎么恢复?电脑总是无故重启怎么办...
- 读林锐《软件工程思想》------讲述软件开发和做程序员的道理--语录
- 【树莓派C语言开发】实验15:电位计传感器(关联PCF8951)
- Layui官方js正则验证手机号,邮箱,网址,日期,身份证
- burpsuit 靶场(Essential skills)
- Vue 中select option默认选中的处理方法
- 系统定制有哪些流程?
热门文章
- 快速模版的本地化改进
- Ci522 13.56MHz非接触式读写器芯片--Si522 Lowcost版本
- 高帝制礼作乐,周昌谏废太子
- 译:谷歌OKR指导手册(全文)
- win7计算机文件移动硬盘,Win7系统下给移动硬盘分区方法是什么
- 三阶魔方还原步骤图_魔方小站三阶魔方盲拧视频教程 (蒙眼拧魔方教程|还原公式图解|3D动画)...
- 如何让 ABAP 报表在后台作业的模式下运行
- scrum敏捷开发、敏捷测试,快速迭代实践
- 【ArcGIS Pro微课1000例】0009:ArcGIS Pro地理配准完整教程(建议收藏)
- 一文贯穿“如何制定研究生规划、找实习、秋招”