您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)AntDesign Vue中Menu菜單怎么用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
屬性 | 說(shuō)明 | 默認(rèn)值 |
---|---|---|
mode | 菜單類(lèi)型,現(xiàn)在支持垂直、水平、和內(nèi)嵌模式三種 | vertical |
inlineCollapsed | inline 時(shí)菜單是否收起狀態(tài) | |
theme | 主題顏色(light /dark ) | light |
openKeys(.sync) | 當(dāng)前展開(kāi)的 SubMenu 菜單項(xiàng) key 數(shù)組 | |
defaultOpenKeys | 初始展開(kāi)的 SubMenu 菜單項(xiàng) key 數(shù)組 | |
selectedKeys(v-model) | 當(dāng)前選中的菜單項(xiàng) key 數(shù)組 | |
defaultSelectedKeys | 初始選中的菜單項(xiàng) key 數(shù)組 |
說(shuō)明defaultSelectedKeys
是默認(rèn)選中的key
(a-menu-item
上綁定的key
),被選中會(huì)有高亮的顯示效果;selectedKeys
也是一樣的作用,不要同時(shí)使用,區(qū)別在于如果只希望指定一個(gè)初始化的菜單選項(xiàng)就使用defaultSelectedKeys
,如果需要通過(guò)自己修改數(shù)據(jù)來(lái)選中菜單的選中項(xiàng)就使用selectedKeys
。
(openKeys
和defaultOpenKeys
也是同理)
openChange
是Menu
的事件,SubMenu
展開(kāi)/關(guān)閉的回調(diào)
若只有兩級(jí)菜單則直接使用v-for
和v-if
指令即可完成;若菜單級(jí)數(shù)≥3則需要使用函數(shù)式組件
。具體原因官網(wǎng)已經(jīng)做了說(shuō)明:
Before v2.0, 因組件內(nèi)部會(huì)動(dòng)態(tài)更改
a-sub-menu
的屬性,如果拆分成單文件,無(wú)法將屬性掛載到a-sub-menu
上,你需要自行聲明屬性并掛載。為了方便,避免屬性的聲明,我們推薦使用函數(shù)式組件。
代碼App.vue
(測(cè)試就隨便在App.vue
里寫(xiě)了)
<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 此項(xiàng)必須被定義 isSubMenu: true, props: { // 解構(gòu)a-sub-menu的屬性,也就是文章開(kāi)頭提到的為什么使用函數(shù)式組件 ...Menu.SubMenu.props, // Cannot overlap with properties within Menu.SubMenu.props menuInfo: { 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: '后臺(tái)用戶', path: '/adminUser', children: [ { key: '2.1.1', title: '新增用戶', path: '/addAdminUser', children: [ { key: '2.1.1。1', title: '用戶xx', path: '/addAdminUserXX', } ] } ] }, { key: '2.2', title: '前臺(tái)用戶', path: '/frontUser', } ] } ], }; }, created(){ const openKeys = window.sessionStorage.getItem('openKeys') if(openKeys){ this.openKeys = JSON.parse(openKeys) } }, methods: { toggleCollapsed() { this.collapsed = !this.collapsed; }, onOpenChange(openKeys) { // 將當(dāng)前打開(kāi)的父級(jí)菜單存入緩存中 window.sessionStorage.setItem('openKeys', JSON.stringify(openKeys)) // 控制只打開(kāi)一個(gè) 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}) { // 獲取到當(dāng)前的key,并且跳轉(zhuǎn) 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
配置,相信在座的各位也會(huì)?。ú粫?huì)的底下留言,包教包會(huì)?。?/p>
如果
vue
報(bào)編譯錯(cuò)誤You are using the runtime-only build of Vue
,可以在vue的配置文件里加一行runtimeCompiler: true
,重新運(yùn)行即可。
如果點(diǎn)擊同一個(gè)菜單報(bào)錯(cuò)了NavigationDuplicated: Avoided redundant navigation to current location
,需要修改下Router
設(shè)置(router/index.js
):
const originalPush = Router.prototype.push Router.prototype.push = function push(location) { return originalPush.call(this, location).catch(err => err) }
自動(dòng)渲染多級(jí)嵌套菜單;刷新會(huì)保存選中的菜單;點(diǎn)擊菜單,收起其他展開(kāi)的所有菜單。
關(guān)于“AntDesign Vue中Menu菜單怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。