6.2 el-menu

一、?<el-menu>: 菜單組件,定義了側邊欄內部的具體導航項、層級結構和交互行為

<el-container><!-- 側邊欄容器 --><el-aside width="200px"><!-- 菜單內容 --><el-menu default-active="1" class="el-menu-vertical-demo"><el-menu-item index="1"><i class="el-icon-menu"></i><span slot="title">導航一</span></el-menu-item><el-submenu index="2"><template slot="title"><i class="el-icon-location"></i><span>導航二</span></template><el-menu-item index="2-1">選項1</el-menu-item><el-menu-item index="2-2">選項2</el-menu-item></el-submenu></el-menu></el-aside><el-main>主內容區</el-main>
</el-container>

二、?<el-aside>?詳解

<el-aside> 是布局系統的一部分,用于定義側邊欄區域。

  • 作用:?提供一個固定寬度(或百分比)的垂直區域,通常放置導航菜單。
  • 關鍵屬性:
    • width:?核心屬性,設置側邊欄的寬度。可以是固定值 (200px) 或百分比 (20%)。這是控制側邊欄大小的主要方式。
  • 與?<el-menu>?的關系:?<el-aside>?只負責“這塊區域有多大”,具體的菜單樣式和行為由?<el-menu>?控制。你可以給?<el-menu>?添加?height: 100%?來讓它填滿?<el-aside>?的高度。

三、?<el-menu>?詳解 (側邊欄的核心)

<el-menu> 是構建側邊欄功能的絕對核心。它非常強大,支持多種模式和豐富的配置。

1. 基本結構
  • <el-menu>:?根菜單容器。
  • <el-menu-item>:?單個菜單項,代表一個可點擊的導航鏈接。
  • <el-submenu>:?子菜單容器,用于創建可展開/折疊的二級(或更多級)菜單。
2. 關鍵屬性
屬性類型說明重要性
modestring菜單展示模式。horizontal?(水平) /?vertical?(垂直) /?popmenu?(彈出菜單,常用于移動端)。側邊欄必須設置為?vertical?????
default-activestring當前激活菜單的?index。用于高亮顯示當前頁面對應的菜單項。通常與 Vue Router 的?$route.path?或?route.meta.activeMenu?結合使用。?????
unique-openedboolean在?mode="vertical"?時是否只保持一個子菜單展開。true?表示手風琴效果,一次只展開一個。????
menu-triggerstring子菜單打開的觸發方式,僅在?mode="horizontal"?時有效。hover?/?click?
collapseboolean是否水平折疊收起菜單(僅在?mode="vertical"?時可用)。true?時菜單收起為圖標。這是實現“收起/展開”側邊欄功能的關鍵。?????
collapse-transitionboolean是否開啟折疊動畫。??
background-colorstring菜單的背景色。??
text-colorstring菜單的文字顏色。??
active-text-colorstring當前激活菜單的文字顏色。???
3.?<el-menu-item>?和?<el-submenu>?屬性
屬性類型說明
indexstring唯一標識符。對于?<el-menu-item>,點擊后會觸發?select?事件并傳遞此?index。對于?<el-submenu>,是其唯一標識,用于控制展開/收起和?unique-opened?邏輯。必須全局唯一
routeobject?|?stringVue Router 的?route?對象或字符串。如果提供了此屬性,當點擊?<el-menu-item>?時,會觸發?router.push?進行導航。這是實現菜單與路由聯動的便捷方式。
disabledboolean是否禁用。
4. 插槽 (Slots)
  • <el-menu-item>?的?title?插槽:?用于自定義菜單項的標題內容(通常包含圖標和文字)。
    <el-menu-item index="1"><i class="el-icon-document"></i><span slot="title">處理中心</span>
    </el-menu-item>
  • <el-submenu>?的?title?插槽 (通過?template):?用于自定義子菜單的標題內容。
    <el-submenu index="2"><template slot="title"><i class="el-icon-location"></i><span>導航二</span></template><!-- 子菜單項 -->
    </el-submenu>
5. 事件 (Events)
  • select: 當菜單項被選中時觸發。回調參數為?(index, indexPath),其中?indexPath?是從根節點到當前節點的?index?路徑數組。這是實現菜單點擊邏輯(如路由跳轉、狀態更新)的主要事件。
  • open: 當子菜單打開時觸發。回調參數為?(index, indexPath)
  • close: 當子菜單關閉時觸發。回調參數為?(index, indexPath)

四、 實現高級功能

1. 與 Vue Router 深度集成

這是最常見的需求。目標是:點擊菜單項跳轉路由,且當前頁面對應的菜單項自動高亮

<template><el-menu:default-active="$route.path" <!-- 關鍵1:綁定當前路由 -->mode="vertical"@select="handleSelect" <!-- 監聽 select 事件 -->><el-menu-item index="/home"><i class="el-icon-menu"></i><span slot="title">首頁</span></el-menu-item><el-menu-item index="/user"><i class="el-icon-user"></i><span slot="title">用戶管理</span></el-menu-item><!-- 或者使用 route 屬性 (更簡潔) --><!-- <el-menu-item index="/order" :route="{ path: '/order' }"> --><!--   <i class="el-icon-tickets"></i> --><!--   <span slot="title">訂單管理</span> --><!-- </el-menu-item> --></el-menu>
</template><script>
export default {watch: {// 關鍵2:監聽路由變化,更新 default-active// 因為 default-active 是 prop,直接修改 $route.path 不會自動更新// 所以通常不需要額外 watch,只要 :default-active 綁定到 $route.path 就行了// 但如果菜單 index 和路由 path 不完全一致,就需要在這里處理映射'$route'(to) {// this.activeIndex = this.getMenuIndexByRoute(to); // 自定義映射邏輯}},methods: {handleSelect(index, indexPath) {// 關鍵3:處理點擊// 如果沒有使用 :route,需要手動跳轉if (index !== this.$route.path) {this.$router.push(index);}}}
}
</script>
2. 實現“收起/展開”側邊欄

利用 <el-menu>collapse 屬性。

<template><div><!-- 收起/展開按鈕 --><el-button @click="toggleCollapse">切換</el-button><el-aside :width="isCollapse ? '65px' : '200px'"> <!-- 動態改變 aside 寬度 --><el-menu:collapse="isCollapse" <!-- 綁定 collapse 狀態 -->:collapse-transition="false" <!-- 可選:關閉動畫更流暢 -->:default-active="$route.path"mode="vertical"><el-menu-item index="/home"><i class="el-icon-menu"></i><!-- 收起時只顯示圖標,展開時顯示圖標和文字 --><span slot="title" v-if="!isCollapse">首頁</span></el-menu-item><!-- 其他菜單項... --></el-menu></el-aside></div>
</template><script>
export default {data() {return {isCollapse: false // 控制收起狀態};},methods: {toggleCollapse() {this.isCollapse = !this.isCollapse;}}
}
</script>
3. 動態生成菜單 (基于數據)

從后端獲取菜單數據,然后用 v-for 動態渲染。

<template><el-menu :default-active="activeIndex" mode="vertical"><template v-for="item in menuData"><el-menu-item v-if="!item.children" :key="item.index" :index="item.index":route="item.route"><i :class="item.icon"></i><span slot="title">{{ item.title }}</span></el-menu-item><el-submenu v-else :key="item.index" :index="item.index"><template slot="title"><i :class="item.icon"></i><span>{{ item.title }}</span></template><el-menu-item v-for="child in item.children" :key="child.index" :index="child.index":route="child.route">{{ child.title }}</el-menu-item></el-submenu></template></el-menu>
</template><script>
export default {data() {return {activeIndex: '/home',menuData: [{index: '1',title: '首頁',icon: 'el-icon-menu',route: { path: '/home' }},{index: '2',title: '用戶管理',icon: 'el-icon-user',children: [{ index: '2-1', title: '用戶列表', route: { path: '/user/list' } },{ index: '2-2', title: '用戶詳情', route: { path: '/user/detail' } }]}]};}
}
</script>
4. 自定義主題

通過 background-color, text-color, active-text-color 屬性或覆蓋 CSS 變量來自定義側邊欄顏色。

<el-menubackground-color="#545c64"text-color="#fff"active-text-color="#ffd04b"...
><!-- 菜單項 -->
</el-menu>

或者通過 CSS 變量(如果 Element UI 版本支持):

/* 全局覆蓋 */
.el-menu {--el-menu-bg-color: #545c64;--el-menu-text-color: #fff;--el-menu-active-color: #ffd04b;
}

五、 最佳實踐與注意事項

  1. index?唯一性:?確保所有?<el-menu-item>?和?<el-submenu>?的?index?值在整個菜單樹中是唯一的,否則?default-active?和?unique-opened?可能會出錯。
  2. 路由聯動:?優先使用?<el-menu-item>?的?route?屬性來實現路由跳轉,代碼更簡潔。如果邏輯復雜,再使用?@select?事件。
  3. 高亮精準:?default-active?的值必須與?$route.path?完全匹配才能高亮。注意路由的?path?是否包含參數或是否是嵌套路由。必要時進行映射。
  4. 性能:?對于非常深或非常寬的菜單,考慮虛擬滾動或懶加載,但 Element UI 默認的?<el-menu>?對于一般后臺系統性能足夠。
  5. 無障礙:?確保菜單項有清晰的文本標簽(<span slot="title">),方便屏幕閱讀器識別。
  6. 響應式:?在移動端,考慮使用?<el-menu mode="popmenu">?或將側邊欄改為可滑動的抽屜 (<el-drawer>)。

總結

Element UI 的側邊欄通過 <el-aside><el-menu> 的完美組合,提供了構建現代化后臺導航的強大能力。掌握 <el-menu> 的各種屬性、事件和與 Vue Router 的集成方式,是開發高效、用戶體驗良好的后臺管理系統的關鍵。通過動態數據和收起/展開功能,可以構建出既美觀又實用的側邊欄導航。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96680.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows 筆記本實現僅關屏仍工作:一種更便捷的 “偽熄屏” 方案

在使用 Windows 筆記本作為臨時服務器或需要后臺持續運行程序時&#xff0c;我們常面臨一個需求&#xff1a;關閉屏幕以節省電量或減少光污染&#xff0c;同時保持系統正常工作。然而&#xff0c;網絡上流傳的諸多方法往往存在局限&#xff0c;要么無法兼顧 “熄屏” 與 “工作…

Linux應急響應一般思路(二)

進程排查進程(Process)是計算機中的程序關于某數據集合上的一次運行活動&#xff0c;是系統進行資源分配和調度的基本單位&#xff0c;是操作系統結構的基礎無論是在Windows系統還是Linux系統中&#xff0c;主機在感染惡意程序后&#xff0c;惡意程序都會啟動相應的進程&#x…

基于 SkyWalking + Elasticsearch + Grafana 的可落地調用鏈監控方案

這個方案成熟穩定、社區活躍、部署相對簡單,非常適合中小型團隊作為第一代調用鏈系統落地。 一、核心組件選型與角色 組件 版本建議 角色 優點 Apache SkyWalking v9.x+ 核心平臺 (采集、分析、存儲、UI) 國產優秀,Java Agent無侵入接入,功能全面,性能損耗低 Elasticsearc…

APP逆向——某站device-id參數

免責聲明本博客所涉及的 爬蟲技術、逆向分析方法 僅用于 學習、研究和技術交流。文中所有示例代碼、工具和方法&#xff0c;均不得用于以下行為&#xff1a;未經授權的數據采集侵犯他人知識產權干擾或破壞正常業務系統任何違反國家法律法規的行為因讀者將本教程內容用于 非法用…

C/C++數據結構之循環鏈表

概述循環鏈表本質上也是一個單向或雙向鏈表&#xff0c;但其最后一個節點的指針并不指向NULL&#xff0c;而是指向鏈表的第一個節點&#xff0c;從而形成一個閉合的環。這種結構使得在遍歷鏈表時&#xff0c;可以從任意一個節點開始&#xff0c;并最終回到起始點。音樂播放軟件…

Mongodb的教程

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言 一、mongodb是什么&#xff1f; 二、mongodb的下載與安裝教程 三、mongodb的常見操作 總結 前言 在當今數據驅動的世界中&#xff0c;數據庫技術是構建高效…

MySQL視圖有什么用?一文讀懂虛擬表的六大核心價值

引言 在數據庫開發中&#xff0c;你是否遇到過這樣的困境&#xff1a;業務人員需要查看復雜關聯數據卻難以理解多表JOIN&#xff0c;或需要限制某些用戶只能訪問特定字段&#xff1f;MySQL視圖正是為此設計的"數據透視鏡"。本文將通過官方定義、典型場景和最佳實踐&a…

ubuntu24.04 frps服務器端自動啟動設置【2025-08-20】

Ubuntu 24.04采用systemd作為默認的init系統&#xff0c;我們可以通過創建systemd服務單元文件來實現開機自啟動。以下是具體實施步驟&#xff1a;創建服務文件使用文本編輯器創建服務配置文件&#xff1a;sudo nano /etc/systemd/system/frps.service編寫服務配置內容在文件中…

數據結構與算法-字符串、數組和廣義表(String Array List)

3 字符串、數組和廣義表&#xff08;String Array List&#xff09; 3.1 字符串&#xff08;String&#xff09; 3.1.1 串的順序存儲 a. 定長順序&#xff1a; #define MAXLEN 255 // 串的定長順序存儲結構 typedef struct {char ch[MAXLEN 1]; // 字符串數據&#xff0c;…

【網絡運維】Shell 腳本編程:if 條件語句

Shell 腳本編程&#xff1a;if 條件語句 if 條件語句概述 if 條件語句是 Linux Shell 腳本編程中最基礎且使用頻率最高的控制結構之一&#xff0c;其語義類似于自然語言中的“如果…那么…”。熟練掌握 if 語句的用法&#xff0c;是成為一名合格運維工程師的基本要求。 if 語句…

浮點型的位結構和表示的值

位結構float 各部分的含義 符號位&#xff1a; 為 0 表示正數&#xff0c;為 1 表示負數。 指數部分&#xff1a; 指數部分是一個移碼。指數部分有 8 位&#xff0c;首先當成無符號整型&#xff0c;則值域是 [0, 255] .因為是移碼&#xff0c;所以 移碼值 無符號整型值 - 127 …

39_基于深度學習的行人摔倒檢測識別系統(yolo11、yolov8、yolov5+UI界面+Python項目源碼+模型+標注好的數據集)

目錄 項目介紹&#x1f3af; 功能展示&#x1f31f; 一、環境安裝&#x1f386; 環境配置說明&#x1f4d8; 安裝指南說明&#x1f3a5; 環境安裝教學視頻 &#x1f31f; 二、數據集介紹&#x1f31f; 三、系統環境&#xff08;框架/依賴庫&#xff09;說明&#x1f9f1; 系統環…

【系統分析師】高分論文:論企業數據治理

【摘要】 2022年3月&#xff0c;我作為系統分析師及IT 負責人&#xff0c;參加了我司的企業級數據平臺建設項目&#xff0c;該項目作為我司在企業數字化轉型過程中重要的里程碑&#xff0c;在我司數字化運營中扮演著關鍵的角色。該項目主要包含企業級數據倉庫&#xff0c;數據治…

Seata原理分析

簡介Apache Seata? (incubating) 是什么&#xff1f;Seata 是一款開源的分布式事務解決方案&#xff0c;致力于在微服務架構下提供高性能和簡單易用的分布式事務服務。在 Seata 開源之前&#xff0c;其內部版本在阿里系內部一直扮演著應用架構層數據一致性的中間件角色&#x…

力扣 30 天 JavaScript 挑戰 第38天 (第九題)學習了 語句表達式的區別 高級函數 promise async await 節流

開始答題 版本一&#xff1a; /*** param {Function} fn* return {Function}*/ var once function(fn) {let runCount0return function(...args){runCountrunCount 1 ? return fn(...args) :return undefined} };/*** let fn (a,b,c) > (a b c)* let onceFn once(fn)…

25年八月份寧德時代社招部分崗位入職Verify測評演繹數字推理SHL題型變更、題庫使用說明

開始測評前&#xff0c;請注意:1、挑選一個安靜的環境&#xff0c;選擇一臺網速正常且無任何網絡端口限制的電腦進行測評;2、移動設備無法兼容遠程監考功能&#xff0c;請使用配備有可正常運作的攝像頭的臺式機或筆記本電腦&#xff0c;建議使用最新版本的Chrome&#xff0c;Fi…

【KO】前端面試四

以下是剩余題目的詳細解答,結合前端知識體系和實際應用場景展開: 91. JS 放在 head 里和放在 body 里有什么區別? 對比維度 放在 <head> 放在 <body> 加載阻塞性 會阻塞頁面渲染,需等待 JS 下載/執行完成后,才繼續渲染頁面 一般放在 </body> 前,頁面渲…

[Vid-LLM] 數據集 | 基準測試

第5章&#xff1a;數據集與基準測試 在前一章中&#xff0c;我們探討了**視頻大語言模型(Vid-LLMs)**能夠執行的各種"工作"或"功能"&#xff0c;從視頻總結到充當智能代理。 我們了解了它們的構建方式和扮演的角色。 但這里有個關鍵問題&#xff1a;這些驚…

34、擴展倉儲管理系統 (跨境汽車零部件模擬) - /物流與倉儲組件/extended-warehouse-management

76個工業組件庫示例匯總 擴展倉儲管理系統 (跨境汽車零部件模擬) 概述 這是一個高級的倉儲管理系統 (WMS) 模擬組件&#xff0c;專為展示跨境汽車零部件的復雜物流場景而設計。它模擬了從海外供應商發貨&#xff0c;經過海運/空運、清關、質檢&#xff0c;到最終入庫上架&am…

nodejs koa留言板案例開發

包含功能 登錄注冊(不開放注冊只是用固定的賬號信息) 查看列表 查看詳情 發布信息 編輯信息 刪除信息 項目接口 npm init -y npm install koa --save npm istall koa-router --save (舊版本) 或者 npm install koa/router --save &#xff08;新版本&#xff09; npm instal…