Vu3+Element-Plus根據路由配置生成菜單導航欄

来源:https://www.cnblogs.com/ycit/archive/2023/08/12/17624261.html
-Advertisement-
Play Games

先看效果,整體界面結構如下 ![image](https://jsd.cdn.zzko.cn/gh/YuanjunXu/Images@main/src/image.4few4wtl3uyo.jpg) 點擊左側菜單欄,右側切換顯示不同頁面內容。 [Vue3使用路由–南河小站](https://www. ...


先看效果,整體界面結構如下

image

點擊左側菜單欄,右側切換顯示不同頁面內容。

Vue3使用路由–南河小站

1 路由配置

路由配置如下:

const routes = [
  {
    path: "",
    component: () => import("@/layout/baseView.vue"),
    redirect: "/index",
    children: [
      {
        path: "/index",
        name: "首頁",
        icon: "SwitchButton",
        hidden: false,
        component: () => import("@/page/dashboard/dashboard.vue"),
      },
      {
        path: "/content",
        name: "內容",
        icon: "Discount",
        hidden: false,
        component: () => import("@/layout/rightView.vue"),
        children: [
          {
            path: "manage-comment",
            icon: "MessageBox",
            name: "管理評論",
            hidden: false,
            component: () => import("@/page/content/manageComment.vue"),
          },
          {
            path: "manage-image",
            icon: "Odometer",
            name: "管理圖片",
            hidden: false,
            component: () => import("@/page/content/manageImage.vue"),
          },
        ],
      },
      {
        path: "/user",
        icon: "UserFilled",
        name: "用戶",
        hidden: false,
        component: () => import("@/layout/rightView.vue"),
        children: [
          {
            path: "list",
            icon: "User",
            name: "用戶列表",
            hidden: false,
            component: () => import("@/page/user/list.vue"),
          },
          {
            path: "reset-pwd",
            icon: "Unlock",
            name: "重置密碼",
            hidden: false,
            component: () => import("@/page/user/resetPwd.vue"),
          },
         // ....
        ],
      },
      {
        path: "/operation",
        icon: "Operation",
        name: "運維",
        hidden: false,
        component: () => import("@/layout/rightView.vue"),
        children: [
          {
            path: "mange-category",
            icon: "Edit",
            hidden: false,
            name: "管理分類",
            component: () => import("@/page/operation/manageCategory.vue"),
          },
          {
            path: "mange-carousel",
            icon: "Crop",
            name: "管理輪播圖",
            hidden: false,
            component: () => import("@/page/operation/manageCarousel.vue"),
          },
        ],
      },
      
    ],
  },
  {
    path: "/login",
    hidden: true,
    component: () => import("@/page/login/login.vue"),
  },
];

說明:

@/layout/baseView.vue是整體頁面結構

@/layout/rightView.vue是公共頁面用於顯示數據內容。

@/page/login/login.vue是登陸頁面

2 頁面結構

右側數據內容視圖是動態的,其它整個頁面結構是固定的,因此提取baseView.vue作為頁面基本結構。

登錄界面是另一個頁面整體,因此login.vue和基本結構頁面baseView.vue都在App.vue頁面中通過路由進行切換,因此App.vue中添加router-view進行動態路由渲染。

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

左側菜單導航,菜單是根據路由進行動態渲染的,所以將路由生成菜單抽取為獨立組組件leftMenuBar.vue。在mounted()中獲取路由配置

export default {
  data() {
    return {
      menuList: [],
    };
  },
  mounted() {
    let routes = router.options.routes;
    this.menuList = routes[0].children;
    console.log(this.menuList);
  },
};

⚠️Vue3通過router.options.routes 獲取配置的路由

在右側數據視圖頁面rightView.vue添加router-view標簽

<template>
  <div class="right-view">
    <div class="header"></div>
    <div class="content">
      <router-view></router-view>
    </div>
  </div>
</template>

3 結合Element-plus 生成菜單導航

導入Element-plus

遍歷路由通過element-plusMenu組件生成菜單導航,完整的代碼如下:

<template>
  <div>
    <el-menu
      default-active="0"
      :unique-opened="true"
      class="el-menu-vertical-demo"
    >
      <template v-for="(item, index) in menuList" :key="index">
        <router-link :to="item.path" v-if="!item.children" :key="index">
          <el-menu-item :index="index + ''">
            <el-icon><component :is="item.icon"></component></el-icon>
            <span>{{ item.name }}</span>
          </el-menu-item>
        </router-link>

        <el-sub-menu :index="index + ''" v-else>
          <template #title>
            <el-icon><component :is="item.icon"></component></el-icon>
            <span>{{ item.name }}</span>
          </template>
          <router-link
            :to="item.path + '/' + sub.path"
            v-for="(sub, subIndex) in item.children"
            :key="subIndex"
          >
            <el-menu-item :index="index + '-' + subIndex">
              <el-icon><component :is="sub.icon"></component></el-icon>
              <span>{{ sub.name }}</span>
            </el-menu-item>
          </router-link>
        </el-sub-menu>
      </template>
    </el-menu>
  </div>
</template>

4 設置菜單圖標

由於element-plus使用svg 圖標,複製的代碼是<el-icon><Search /></el-icon>這樣的,因此在遍歷路由時,就不能通過<i :calss = "xxxx"></i>設置了,要通過<el-icon><component :is="xxxx"></component></el-icon>來設置,:is綁定的是icon的名稱

    <el-icon><component :is="item.icon"></component></el-icon>

image

⚠️這個地方element不同,element使用的是font-class的圖標,可用 直接綁定

本文來自博客園,作者:宣君{https://www.nhit.icu/},轉載請註明原文鏈接:https://www.cnblogs.com/ycit/p/17624261.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # Docker概述 ## Docker為何要出現 由於傳統的方式,不能打包環境,而環境的配置也及其繁瑣,及其耗費時間,而docker就可以非常有效的解決這個問題 **docker的思想來源於集裝箱,docker的核心思想!打包裝箱,也就是說每個箱子都是隔開的,docker通過這種機制可以吧伺服器利 ...
  • 提要:本系列文章主要參考`MIT 6.828課程`以及兩本書籍`《深入理解Linux內核》` `《深入Linux內核架構》`對Linux內核內容進行總結。 記憶體管理的實現覆蓋了多個領域: 1. 記憶體中的物理記憶體頁的管理 2. 分配大塊記憶體的伙伴系統 3. 分配較小記憶體的slab、slub、slob分 ...
  • 屏蔽驅動列印信息 root許可權:echo "1 4 1 7" > /proc/sys/kernel/printk sudo sh -c "sudo echo "1 4 1 7" > /proc/sys/kernel/printk 實現觸摸屏校驗 第一次進入Linux系統時,會出現觸摸校驗提示,按提示 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230811232544082-164229613.png) # 1. 基本信息 SQL經典實例 SQL Cookbook [[美]安東尼·莫利納羅(Anthony Molin ...
  • ![file](https://img2023.cnblogs.com/other/3195851/202308/3195851-20230811181235894-1707158282.png) # 個人簡介 * 王海林 白鯨開源研發工程師 * GitHub ID:hailin0 * 做過性能監控 ...
  • GaussDB(DWS)支持多種相容模式,為了相容目標資料庫,各模式之間或多或少存在一些行為差異。這裡分享一個mysql相容模式下的表達式函數因不同寫法引發的結果差異案例。 ...
  • GaussDB(for Redis)提供了完備的大Key解決方案,支持大Key線上診斷、監控預警、承載力強等能力,彌補了開源Redis在大key問題上的不足,讓DBA如虎添翼。 ...
  • 在數字經濟時代下,數據驅動業務創新發展已經成為企業的主要選擇,基金行業機構也在積極推進數字化轉型,但機遇與挑戰並存。數據要轉化為[數據要素](https://www.dtstack.com/?src=szsm),需要系統體系化的數據能力建設作為催化劑。 基金行業也表現出一定的痛點,其中表現為數據安全 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...