最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ant-design-vue導(dǎo)航菜單a-menu的使用解讀

 更新時間:2022年10月10日 10:25:35   作者:一羊遷徙  
這篇文章主要介紹了ant-design-vue導(dǎo)航菜單a-menu的使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

此文章包含了遞歸生成三級菜單,刷新狀態(tài)保留,只展開一個父級菜單等常見問題。

一、效果

可以看到遞歸生成三級菜單,刷新狀態(tài)保留,只展開一個父級菜單等常見問題得以解決。我自己的電腦設(shè)備老舊,反應(yīng)緩慢的問題請忽略。

在這里插入圖片描述

二、關(guān)鍵的API

說實話遇到問題了不知道該怎么解決,說白了還是不懂得API的使用,對相關(guān)的API不夠了解,熟悉了API怎么操作都行。下面說說用到但是又容易混淆的API。

1.defaultSelectedKeys 默認(rèn)選中的key

這里的key對應(yīng)的是a-menu-item上面綁定的key,如果被選中,會進行導(dǎo)航的跳轉(zhuǎn)以及被給予高亮狀態(tài)。

2.openKeys 展開的a-sub-menu的key

這里的key對應(yīng)的是a-sub-menu上面綁定的key。如果綁定在a-menu上,對應(yīng)的子菜單會打開。

3.selectedKeys 受控選中的key

這里的key對應(yīng)的是a-menu-item上面綁定的key,如果被選中,會進行導(dǎo)航的跳轉(zhuǎn)以及被給予高亮狀態(tài)。

與defaultSelectedKeys 有什么區(qū)別:

  • 這兩個屬性為二選一使用,如果同時使用時,defaultSelectedKeys無效,將會以selectedKeys為準(zhǔn)。
  • 如果你只是希望指定一個初始化選中的菜單項,請使用defaultSelectedKeys;
  • 如果你需要每次通過傳入不同的props改變Menu組件的選中項,請使用selectedKeys。

三、注意事項

此處強調(diào)一點,如果是一級以及二級菜單的生成,普通的兩層for循環(huán)結(jié)合遞歸以及v-if生成即可。

如果是想使用a-menu生成三級或者三級以上的菜單,那么就需要定義在單文件內(nèi)定義函數(shù)式組件。那為什么不推薦單文件的形式定義組件,而是使用函數(shù)式組件?

以下是官方文檔的說明:

在這里插入圖片描述

四、代碼

<template>
  <a-layout id="components-layout-demo-custom-trigger" style="height:100%">
    <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">
              <!-- 如果當(dāng)前遍歷項沒有children,視為子菜單項,注意所有的key都是path用于路由跳轉(zhuǎn),以及當(dāng)前選中記錄 -->
              <a-menu-item v-if="!item.children" :key="item.path">
                <i :class="item.icon" />
                <span>{{ item.title }}</span>
              </a-menu-item>
              <!-- 否則視為子菜單,傳入菜單信息并且運用下面定義的函數(shù)式組件 -->
              <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';
// 定義函數(shù)式組件
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: {
    // 解構(gòu)a-sub-menu的屬性,也就是文章開頭提到的為什么使用函數(shù)式組件
    ...Menu.SubMenu.props,
    // 接收父級傳遞過來的菜單信息
    menuInfo: {
      type: Object,
      default: () => ({}),
    },
  },
};
export default {
  data() {
    return {
      // 菜單縮進
      inlineIndent:12,
      // 默認(rèn)不折疊
      collapsed: false,
      // 全部頂級父節(jié)點,用來控制所有父級菜單只展開其中的一項,可用遍歷菜單信息進行賦值
      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: '安全風(fēng)險管理',
              path: '/safeRisk',
              icon:'',
              children: [
                { 
                  key: '2.1.1',
                  title: '風(fēng)險分類管理',
                  path: '/riskClassifyManage',
                  icon:'',
                },
                {
                    key: '2.1.2',
                    title: '分類辨識',
                    path: '/classifyIdentity',
                    icon:'',
                }
              ],
            },
          ],
        },
        {
          key: '3',
          title: '質(zhì)量信息管理',
          path: '/qualityInfoManage',
          icon:'iconfont icon-zhiliang',
          children:[
              {
                  key: '3.1',
                  title: '質(zhì)量控制點管理',
                  path: '/controlPointManage',
                  icon:'',
              }
          ]
        }
      ],
    }
  },
  created(){
    // 將從緩存中取出openKeys
    const openKeys = window.sessionStorage.getItem('openKeys')
    if(openKeys){
      // 存在即賦值
      this.openKeys = JSON.parse(openKeys)
    }
  },
  methods: {
    // 點擊菜單,路由跳轉(zhuǎn),注意的是當(dāng)點擊MenuItem才會觸發(fā)此函數(shù)
    menuClick({ item, key, keyPath }) {
      // 獲取到當(dāng)前的key,并且跳轉(zhuǎn)
      this.$router.push({
        path: key
      })
    },
    onOpenChange(openKeys) {
      // 將當(dāng)前打開的父級菜單存入緩存中
      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>

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue-Element-Admin前端接入SSO的方法步驟

    Vue-Element-Admin前端接入SSO的方法步驟

    本文主要介紹了Vue-Element-Admin前端接入SSO的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Vue2.0 ES6語法降級ES5的操作

    Vue2.0 ES6語法降級ES5的操作

    這篇文章主要介紹了Vue2.0 ES6語法降級ES5的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue實現(xiàn)從外部修改組件內(nèi)部的變量的值

    vue實現(xiàn)從外部修改組件內(nèi)部的變量的值

    這篇文章主要介紹了vue實現(xiàn)從外部修改組件內(nèi)部的變量的值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue框架和react框架的區(qū)別以及各自的應(yīng)用場景使用

    vue框架和react框架的區(qū)別以及各自的應(yīng)用場景使用

    這篇文章主要介紹了vue框架和react框架的區(qū)別以及各自的應(yīng)用場景使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue3中vite.config.js相關(guān)常用配置超詳細(xì)講解

    vue3中vite.config.js相關(guān)常用配置超詳細(xì)講解

    在Vue3項目中vite.config.js文件是Vite構(gòu)建工具的配置文件,它用于定義項目的構(gòu)建和開發(fā)選項,這篇文章主要介紹了vue3中vite.config.js相關(guān)常用配置的相關(guān)資料,需要的朋友可以參考下
    2025-04-04
  • VueCli4項目配置反向代理proxy的方法步驟

    VueCli4項目配置反向代理proxy的方法步驟

    這篇文章主要介紹了VueCli4項目配置反向代理proxy的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Vue2.0/3.0雙向數(shù)據(jù)綁定的實現(xiàn)原理詳解

    Vue2.0/3.0雙向數(shù)據(jù)綁定的實現(xiàn)原理詳解

    這篇文章主要給大家介紹了關(guān)于Vue2.0/3.0雙向數(shù)據(jù)綁定的實現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Vuex數(shù)據(jù)的存儲與獲取方式

    Vuex數(shù)據(jù)的存儲與獲取方式

    這篇文章主要介紹了Vuex數(shù)據(jù)的存儲與獲取方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 談?wù)刅ue中的nextTick

    談?wù)刅ue中的nextTick

    Vue.nextTick是Vue官方給我們提供的一個API(方法),作用是在下次DOM更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào)。在修改數(shù)據(jù)之后立即使用這個方法,獲取更新后的DOM
    2021-04-04
  • Vue3實現(xiàn)獲取驗證碼按鈕倒計時效果

    Vue3實現(xiàn)獲取驗證碼按鈕倒計時效果

    這篇文章主要介紹了Vue3實現(xiàn)獲取驗證碼按鈕倒計時效果,用戶點擊獲取驗證碼按鈕,發(fā)送請求給后端,按鈕失效,并且開始倒計時60秒;在此期間,用戶無法再次點擊按鈕,即使用戶刷新頁面,倒計時依然存在,直到倒計時完畢,按鈕恢復(fù),感興趣的小伙伴跟著小編一起來看看吧
    2024-10-10

最新評論

崇州市| 石棉县| 招远市| 平和县| 陵水| 襄城县| 平乡县| 临泉县| 宜君县| 佳木斯市| 美姑县| 迁西县| 苏尼特右旗| 定陶县| 澄城县| 海城市| 黑水县| 葵青区| 汝州市| 紫阳县| 桦甸市| 淮滨县| 武定县| 东城区| 霍林郭勒市| 闽清县| 安康市| 长寿区| 周至县| 南郑县| 越西县| 陆川县| 肥城市| 渝中区| 双峰县| 临沭县| 伊金霍洛旗| 梅河口市| 永修县| 寿宁县| 肥西县|