溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

AntDesign Vue中Menu菜單怎么用

發(fā)布時(shí)間:2021-12-20 12:20:04 來(lái)源:億速云 閱讀:1137 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)AntDesign Vue中Menu菜單怎么用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

常用屬性

屬性說(shuō)明默認(rèn)值
mode菜單類(lèi)型,現(xiàn)在支持垂直、水平、和內(nèi)嵌模式三種vertical
inlineCollapsedinline 時(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)選中的keya-menu-item上綁定的key),被選中會(huì)有高亮的顯示效果;selectedKeys 也是一樣的作用,不要同時(shí)使用,區(qū)別在于如果只希望指定一個(gè)初始化的菜單選項(xiàng)就使用defaultSelectedKeys,如果需要通過(guò)自己修改數(shù)據(jù)來(lái)選中菜單的選中項(xiàng)就使用selectedKeys

openKeysdefaultOpenKeys也是同理)

常用事件

openChangeMenu的事件,SubMenu 展開(kāi)/關(guān)閉的回調(diào)

遞歸嵌套多級(jí)菜單

若只有兩級(jí)菜單則直接使用v-forv-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)
}

效果

AntDesign Vue中Menu菜單怎么用

自動(dòng)渲染多級(jí)嵌套菜單;刷新會(huì)保存選中的菜單;點(diǎn)擊菜單,收起其他展開(kāi)的所有菜單。

關(guān)于“AntDesign Vue中Menu菜單怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI