大數據畢業設計之前端04:管理系統為什么要自己實現圖標組件

關鍵字:BuildAdmin、Icon、圖標、Vue、ElementUI

前言

說到圖標,在BuildAdmin中用到的地方很多。比如上一篇中的折疊圖標,還有菜單欄圖標、導航菜單欄圖標等。常見的圖標有:ElementUI圖標、font-awesome、iconfont阿里圖標以及本地svg這四類圖標。

在使用四種不同的圖標時,使用的標簽都是不一樣的,所以定義一個統一的組件,使用一個標簽就能包含四類圖標是非常有必要的。當然,這只是其中的一個原因,至于其他原因可以接著看下文。

這里先放出架構圖,可以看完整篇文章之后再回來看。

圖標icon

BuildAdmin在aside中主要使用了兩種圖標:

1. 菜單圖標

用的是官方 @element-plus/icons-vue

圖標庫鏈接:https://element-plus.org/zh-CN/component/icon.html

2. 折疊按鈕

用的是font-awesome圖標庫,使用npm安裝后即可使用。

npm i font-awesome

圖標使用

BuildAdmin中,封裝了一個Icon組件,作為定義圖標的組件。

后來會重點分析代碼,這里先思考:為什么要為圖標單獨封裝一個組件? 這里先看看兩種圖標的用法。

<!-- 定義icons-vue圖標 -->
<el-icon :size="size" :color="color"><Edit />
</el-icon><!--  定義font-awesome圖標 -->
<i class="fa fa-camera-retro fa-lg"></i>

首先,兩種圖標的寫法不一致。其次,如果說是遍歷菜單路由的時候,如何確認el-icon要使用哪個圖標? 這一點主要在動態路由會講,這里先簡單的提一下。

什么意思呢?就是你從后端請求了菜單列表,控制臺菜單要用圖標A,會員中心菜單要用圖標B,你該如何用el-icon渲染這些圖標標簽呢?從上面的代碼示例可以看到,你只有把Edit替換成A和B才會顯示A/B圖標,但是在代碼里想要替換,難度還是挺大的。

所以這個時候就需要定義一個類似于方法的東西,設置一個圖標參數,根據圖標參返回一個現成的圖標。這個Icon組件就相當于這個”方法“,會根據你傳入的A、B來返回對應的圖標。

封裝ElementPlus圖標

逐個分析實現原理,這里先從ElementPlus圖標開始。

1. Icon的使用

先回顧一下封裝好的Icon是如何使用的。

<Iconv-if="config.layout.layoutMode != 'Streamline'"@click="onMenuCollapse":name="config.layout.menuCollapse ? 'fa fa-indent' : 'fa fa-dedent'":class="config.layout.menuCollapse ? 'unfold' : ''":color="config.getColorVal('menuActiveColor')"size="18"class="fold"
/>

v-if、click這些可以先不用管,這些都是邏輯、事件的屬性。這里主要關注name、class、size、color這些基本屬性標簽。

這里說一下,上面的config就是上一篇提到的pinia定義的狀態變量config.ts。

2.定義Icon

使用 defineComponent 定義Icon組件,在TypeScript中必須使用這個方法定義。使用props接收Icon組件的參數(vue中的props和emits一定要好好學,都是父子組件之間傳遞參數的)。

這純純的是vue選項式寫法。name表示這個組件是Icon,props里面定義的是傳入參數,這里是name、size、color。type表示類型,required表示是否必須,defalut表示默認值。在Icon使用示例中,三個屬性都定義了。

在setup()中對接收到的參數進行一個預處理,主要是給size加上px單位。接下來,就是如何根據這些參數來渲染對應的圖標。

3. 渲染對應圖標

這里可以看到,如果name是以el-icon開頭,就渲染一個Element Plus的圖標,如果是fa開頭,就渲染font-awesome的圖標。h() 就是vue的渲染函數,相當于createVnode()

h()的用法在官網里面有,至于如何確定里面的class、style參數,同樣可以從控制臺里面看。

可以看到font-awesome的圖標,在編譯之后就是一個i元素,我們在使用Icon時,傳入的參數name為fa fa-indent,根據瀏覽器中渲染后的i標簽的class,只需要再拼接上icon和空格就可以。

這就是反向學習,從應用結果中來推斷一個知識點的用法。

3.Element Plus圖標注冊

和font-awesome不同的是,Element的el-icon是組件,需要先加載然后才能使用。根據官方文檔將每個icon組件注冊,只不過在注冊時,在icon的name之前統一加上el-icon前綴,這樣便于在Icon中識別。

定義了一個 registerIcons() 方法來注冊Icon。其中,app是全局的根節點,調用component() 來加載Icon,然后遍歷Element中所有的標簽進行注冊加載。

同樣,可以在瀏覽器查看el-icon在h()中渲染的class和style。

4. 加載Icon

最后,在main.ts中調用registerIcons完成加載。

import {registerIcons} from '@/utils/icons'const app = createApp(App)
registerIcons(app)

這樣,我們就可以使用<Icon>標簽以及el-icon標簽。

結語

本篇文章主要寫了Icon圖標的注冊,Icon作為一個“門面”,為使用多種類型的圖標提供了統一的規范。在BuildAadmin的Icon實現中,對本地svg圖標加載也進行了實現。

我本來覺得svg用不到,就在Icon中只實現了el-icon和front-awesome兩種圖標,后來在實現導航欄時又回過頭來,實現了svg圖標,這個就留給下篇文章。

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

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

相關文章

94. 遞歸實現排列型枚舉 刷題筆記

思路 依次枚舉 每個位置用哪個數字 要求按照字典序最小來輸出 而每次搜索下一層時i都是從1開始 也就是說 如果有小的數可以填上 那么該方案會填上這個數字 例如 當n等于3 第一次搜索 1 2 3輸出后返回 返回后此時i3 第二個位置填3 1 3 2 輸出后返回 此時返回到第一層…

云計算 2月21號 (linux文件及用戶管理)

一、文件管理 1.1快捷鍵 編輯命令&#xff1a; Ctrl a &#xff1a;移到命令行首 Ctrl e &#xff1a;移到命令行尾 Ctrl u &#xff1a;從光標處刪除至命令行首 Ctrl k &#xff1a;從光標處刪除至命令行尾 Ctrl w &#xff1a;從光標處刪除至字首 Ctrl d &#x…

20240301-2-ZooKeeper面試題(二)

11. Chroot 特性 3.2.0 版本后&#xff0c;添加了 Chroot 特性&#xff0c;該特性允許每個客戶端為自己設置一個命名空間。如果一個客戶端設置了 Chroot&#xff0c;那么該客戶端對服務器的任何操作&#xff0c;都將會被限制在其自己的命名空間下。 通過設置 Chroot&#xff…

Win11遠程桌面登陸教程

必備軟件 Remote Desktop 這個軟件用于便捷操作 Tailscale 這個用于創建虛擬局域網讓兩臺設備處于同一個網段便于遠程連接 詳細步驟 0、打開電腦設置允許遠程連接模式 把這里的開關打開就行。 1、設置允許登陸的用戶以及密碼 在管理員模式下的宿主電腦上面輸入以下命令…

支付寶小程序中喚起支付(前后端)

Java后臺獲取支付寶支付唯一訂單號 /*** 支付寶小程序支付*/PostMapping(value "/xcxPayZFBTHREE")ResponseBodypublic Map<String,Object> xcxPayZFBTHREE(RequestBody byte[] req) {HashMap<String, Object> objectObjectMap new HashMap<>();…

jax可微分編程的筆記(7)

jax可微分編程的筆記(7) 第七章 優化算法 從優化理論的整體框架來看&#xff0c;任何優化問題都可以被分解為 模型的建立&#xff0c;損失函數的構造以及優化算法的選取這三個部分。 其中優化算法的具體形式&#xff0c;又依賴于步長下降方向和終止條件 的選取。 對于多維函…

JavaScript 瀏覽器元素滾動 scrollIntoView()

scrollIntoView() ? DOM 規范中沒有涉及的一個問題是如何滾動頁面中的某個區域。為填充這方面的缺失&#xff0c;不同瀏覽器實現了不同的控制滾動的方式。在所有這些專有方法中&#xff0c;HTML5 選擇了標準化 scrollIntoView()。 ? scrollIntoView() 方法存在于所有 HTML …

深度學習中常見的backbone、neck、head的理解

在深度學習中&#xff0c;常見的backbone、neck和head是指網絡結構的不同部分&#xff0c;它們各自承擔著不同的功能&#xff1a; Backbone&#xff08;骨干網絡&#xff09;&#xff1a;骨干網絡通常是指整個深度神經網絡的主要部分&#xff0c;負責提取輸入數據的特征。骨干網…

寒假作業Day 02

這是第二天的作業&#xff0c;fighting&#xff01; Day 02 一、選擇題 首先char* s[6]是指針數組&#xff0c;也就是其存儲的都是這些字符串的地址&#xff0c;其實際上的類型為char**&#xff0c;而fun函數傳入了s數組的首地址。而后續fun函數中打印字符&#xff0c;p[i]即…

ad18學習筆記十六:如何放置精準焊盤到特定位置,捕抓功能的講解

網上倒是一堆相關的指導 AD軟件熟練度提升&#xff0c;如何設置板框捕捉&#xff1f;_嗶哩嗶哩_bilibili 關于Altium Designer 20 的捕抓功能的講解_ad捕捉設置-CSDN博客 AD軟件捕捉進階實例&#xff0c;如何精確的放置布局元器件&#xff1f;_嗶哩嗶哩_bilibili AD繪制PCB…

項目-SERVER模塊-Socket模塊

Socket模塊 一、Socket模塊是什么&#xff1f;二、代碼實現1.成員變量2.構造、析構函數3.獲取套接字文件描述符4.創建套接字5.綁定地址信息6.開始監聽連接請求7.向服務器發起連接8.獲取新連接9.接收數據10.非阻塞接收數據11.發送數據12.非阻塞發送數據13.關閉套接字14.創建一個…

何時使用子查詢?一個使用子查詢的SQL示例及其工作原理

何時使用子查詢&#xff1f;給出一個使用子查詢的SQL示例&#xff0c;并解釋其工作原理。 子查詢&#xff0c;也稱為內部查詢或嵌套查詢&#xff0c;是嵌入在另一個SQL查詢中的查詢。外部查詢&#xff0c;有時稱為外部查詢或主查詢&#xff0c;是包含子查詢的查詢。子查詢可以…

20240301作業

1.使用fwrite、fread將一張隨意的bmp圖片&#xff0c;修改成德國的國旗 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fp fopen("./gaoda.bmp","…

24.3.1 《CLR via C#》 筆記9

第十二章 泛型 泛型&#xff1a;支持泛型值類型、泛型引用類型、泛型接口、泛型委托&#xff1b;允許在引用類型、值類型和接口中定義泛型方法&#xff1b;泛型參數變量要么稱為T&#xff0c;要么以T開頭 具有泛型類型參數的類型稱為開放類型&#xff0c;不允許構造實例&#…

Java畢業設計 基于SpringBoot vue 社區團購系統

Java畢業設計 基于SpringBoot vue 社區團購系統 SpringBoot vue 社區團購系統 功能介紹 前端用戶: 首頁 圖片輪播 商品信息 商品分類展示 搜索 商品詳情 點我收藏 添加到購物車 立即購買 我要開團 去參團 評論 公告資訊 資訊詳情 登錄 注冊 個人中心 更新信息 點我充值 我的訂…

Mysql筆記3

1、快速創建表 原理&#xff1a; 將一個查詢結果當做一張表新建 這個可以完成表的快速復制 create table emp2 as select * from emp; mysql> select * from emp2; ---------------------------------------------------------------------- …

【vscode提取函數快捷鍵】提取函數,減少大方法的復雜度

在 Visual Studio Code 中&#xff0c;提取函數的快捷鍵取決于你所使用的編程語言和安裝的插件。以下是一些常用的快捷鍵組合&#xff0c;可以用來在 Visual Studio Code 中提取函數&#xff1a; 執行以下步驟來提取函數&#xff1a; 選中要提取的代碼塊。右鍵單擊選中的代碼…

System Verilog學習筆記(十二)——數組(2)

System Verilog學習筆記&#xff08;十二&#xff09;——數組&#xff08;2&#xff09; 動態數組 在編譯時不會為其定制尺寸&#xff0c;而是在仿真運行時來確定動態數組一開始為空&#xff0c;需要使用new[ ]來為其分配空間聲明方式 int dyn[],d2[]; //聲明了兩個動態數組…

git之遠程操作

一.分布式版本控制系統 分布式版本控制系統通常也有?臺充當“中央服務器”的電腦&#xff0c;但這個服務器的作?僅僅是?來?便“交換”?家的修改&#xff0c;沒有它?家也?樣?活&#xff0c;只是交換修改不?便?已。有了這個“中央服務器”的電腦&#xff0c;這樣就不怕…

ChatGPT學習第四周

&#x1f4d6; 學習目標 ChatGPT實踐操作 通過實際操作和練習&#xff0c;加深對ChatGPT功能的理解。 項目&#xff1a;創建一個ChatGPT應用案例 設計一個基于ChatGPT的小項目&#xff0c;將理論應用于實踐。 ?? 學習活動 學習資料 《萬字干貨&#xff01;ChatGPT 從零完…