通過el-tree自定義渲染網頁版工作目錄,實現鼠標懸浮顯示完整名稱、用icon區分文件和文件夾等需求

目錄

一、通過el-tree自定義渲染網頁版工作目錄

1.1、需求介紹

1.2、使用el-tree生成文檔目錄

1.2.1、官方基礎用法

? ? ? ? ①效果

? ? ? ? ②代碼:

1.2.2、自定義文檔目錄(實現鼠標懸浮顯示完整名稱、用icon區分文件和文件夾)

? ? ? ? ①效果(直接效果-左、鼠標懸浮顯示完整名稱的效果-右):

? ? ? ? ?②template代碼

? ? ? ? ③javascript代碼

二、總結


一、通過el-tree自定義渲染網頁版工作目錄

1.1、需求介紹

????????最近做項目時需要做一些云原生相關的內容,有個需求要在服務器上做臨時文件夾作為工作目錄,同時要將工作目錄映射到docker image中和前端頁面上。那么將服務器的本地工作目錄渲染到前端頁面上是必須要實現的部分,其中從后端API獲取本地目錄信息后,將數據渲染成自定義的前端工作目錄是篇博客將要談到的主要內容。

????????本篇博客不講docker、不講云原生,想要了解這方面知識的請關注我的其他博客,不了解這些知識的不影響閱讀本文。

????????本文會從前端渲染頁面開始,還有一篇博客去講如何設計后端API讀取本地目錄,獲取文件信息和文件系統層級數據。

????????傳送門:Java||Springboot讀取本地目錄的文件和文件結構,讀取服務器文檔目錄數據供前端渲染的API實現-CSDN博客

1.2、使用el-tree生成文檔目錄

1.2.1、官方基礎用法

? ? ? ? 官方文檔傳送門:Tree 樹形控件 | Element Plus

????????這里就簡單提一下,具體的可以在官方文檔里面看看,最基礎的直接導入就行。

? ? ? ? ①效果

? ? ? ? ②代碼:
<template><el-treestyle="max-width: 600px":data="data":props="defaultProps"@node-click="handleNodeClick"/>
</template><script lang="ts" setup>
interface Tree {label: stringchildren?: Tree[]
}const handleNodeClick = (data: Tree) => {console.log(data)
}const data: Tree[] = [{label: 'Level one 1',children: [{label: 'Level two 1-1',children: [{label: 'Level three 1-1-1',},],},],},{label: 'Level one 2',children: [{label: 'Level two 2-1',children: [{label: 'Level three 2-1-1',},],},{label: 'Level two 2-2',children: [{label: 'Level three 2-2-1',},],},],},{label: 'Level one 3',children: [{label: 'Level two 3-1',children: [{label: 'Level three 3-1-1',},],},{label: 'Level two 3-2',children: [{label: 'Level three 3-2-1',},],},],},
]const defaultProps = {children: 'children',label: 'label',
}
</script>

1.2.2、自定義文檔目錄(實現鼠標懸浮顯示完整名稱、用icon區分文件和文件夾)

? ? ? ? 官方提供的基礎版本側重于多種類型,但忽視每種類型的普適性,這其實就是讓我們自己設計滿足具體情況的文檔目錄樣式,官方只提供不同類型的用法。

? ? ? ? 自定義設計就是經典套路了,插槽該出場了。

? ? ? ? 數據請參考(其中有完整的數據結構和內容):Java||Springboot讀取本地目錄的文件和文件結構,讀取服務器文檔目錄數據供前端渲染的API實現-CSDN博客

? ? ? ? ①效果(直接效果-左、鼠標懸浮顯示完整名稱的效果-右):

? ? ? ? ?②template代碼

? ? ? ? 其中el-icon有個v-if判斷,確定是文件夾就添加文件夾的圖標,否則就是文件圖標,這里有具體的需求可以寫的更加豐富些。el-tooltip是用來懸浮鼠標的時候提供完整名稱的。

      <el-tree:data="treeData":props="defaultProps"@node-click="handleNodeClick"><template #default="{ node, data }"><el-icon v-if="data.children && data.children.length > 0"><Folder/></el-icon><el-icon v-else><Tickets /></el-icon><el-tooltipclass="item"effect="light":content="data.label"placement="top-start"><span>{{ node.label }}</span></el-tooltip></template></el-tree>
? ? ? ? ③javascript代碼

? ? ? ? 其中getDirectory是從后端獲取數據的API,后端數據請參考另一篇博客,treeData是提供的測試數據,如果還沒有后端數據可以先用這個數據做測試。

import {Upload,FolderChecked,SetUp,Edit,Box,ShoppingTrolley,
} from "@element-plus/icons-vue";
import { Ref, onMounted, ref } from "vue";/*** area-left* 左側工作目錄所需要包含的代碼*/// 樹形控件所需要的數據及對應設置
// 樹形控件所需要的數據及對應設置
// 樹形控件所需要的數據及對應設置
interface Tree {label: string;children?: Tree[];
}// const treeData: Tree[] = [
//   {
//     label: "Level one 1",
//     children: [
//       {
//         label: "Level two 1-1",
//         children: [
//           {
//             label: "Level three 1-1-1",
//           },
//         ],
//       },
//     ],
//   },
//   {
//     label: "Level one 2",
//     children: [
//       {
//         label: "Level two 2-1",
//         children: [
//           {
//             label: "Level three 2-1-1",
//           },
//         ],
//       },
//       {
//         label: "Level two 2-2",
//         children: [
//           {
//             label: "Level three 2-2-1",
//           },
//         ],
//       },
//     ],
//   },
//   {
//     label: "Level one 3",
//     children: [
//       {
//         label: "Level two 3-1",
//         children: [
//           {
//             label: "Level three 3-1-1",
//           },
//         ],
//       },
//       {
//         label: "Level two 3-2",
//         children: [
//           {
//             label: "Level three 3-2-1",
//           },
//         ],
//       },
//     ],
//   },
// ];const defaultProps = {children: "children",label: "label",
};const nodeSelected = ref();
// 點擊節點觸發的事件
const handleNodeClick = (data: Tree) => {nodeSelected.value = data;// console.log(nodeSelected.value);
};const treeData: Ref<Tree[]> = ref([] as Tree[]);// 從后端獲取和格式化工作目錄的方法
const getAndFormatDirectory = async () => {const response = await getDirectory();treeData.value = formatDirectory(response);
};// 格式化后端工作目錄的方法
const formatDirectory = (data: any, n = []) => {return data.map((item: any) => {// 這里n和newArr都是為了將文件的層級以及在哪些文件夾目錄下保留下來,方便讀取和編輯if (item.directory == true) {var newArr: any = [...n];// newArr[0] += 1;newArr.push(item.name);}return {label: item.name,children: item.children ? formatDirectory(item.children, newArr) : [],generation: n,};});
};// 加載頁面時,先讀取一次工作目錄
onMounted(async () => {getAndFormatDirectory();
});

? ? ? ? 至此,就完成了對el-tree顯示效果的自定義,這里我的需求比較輕量,寫的就比較簡潔,如果有更復雜詳細的需求也是用這樣的方法,只是多寫一些代碼而已。

二、總結

? ? ? ? el-tree用來做前端的文檔目錄還是挺好用的,尤其是自帶的node-click事件,真的給后續功能的實現提供了很多幫助,其他的事件方法也很全面,用起來還是很舒服的。

? ? ? ? 博客不應該只有代碼和解決方案,重點應該在于給出解決方案的同時分享思維模式,只有思維才能可持續地解決問題,只有思維才是真正值得學習和分享的核心要素。如果這篇博客能給您帶來一點幫助,麻煩您點個贊支持一下,還可以收藏起來以備不時之需,有疑問和錯誤歡迎在評論區指出~

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

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

相關文章

find 幾招在 Linux 中高效地查找目錄

1. 介紹 在 Linux 操作系統中&#xff0c;查找目錄是一項常見的任務。無論是系統管理員還是普通用戶&#xff0c;都可能需要查找特定的目錄以執行各種操作&#xff0c;如導航文件系統、備份數據、刪除文件等。Linux 提供了多種命令和工具來幫助我們在文件系統中快速找到目標目…

淺談后端整合Springboot框架后操作基礎配置

boot基礎配置 現在不訪問端口8080 可以嗎 我們在默認啟動的時候訪問的是端口號8080 基于屬性配置的 現在boot整合導致Tomcat服務器的配置文件沒了 我們怎么去修改Tomcat服務器的配置信息呢 配置文件中的配置信息是很多很多的... 復制工程 保留工程的基礎結構 抹掉原始…

樸素貝葉斯+SMSSpamCollections

1. 打開 Jupyter 后&#xff0c;在工作目錄中&#xff0c;新建一個文件夾命名為 Test01 &#xff0c;并且在文件夾中導入數據 集。在網頁端界面點擊 “upload” 按鈕&#xff0c;在彈出的界面中選擇要導入的數據集。然后數據集出現 在 jupyter 文件目錄中&#xff0c;此時…

Vue.js Promise 與 async/await 的比較

在現代 Web 開發中&#xff0c;異步操作是不可避免的。在處理異步數據獲取時&#xff0c;開發人員通常會使用 Promise 或 async/await。雖然兩者都可以實現相同的功能&#xff0c;但它們在代碼風格、可讀性和錯誤處理等方面有所不同。本文將對這兩種方法進行比較&#xff0c;并…

初識Qt:從Hello world到對象樹的深度解析

Qt中的對象樹深度解析 Hello world1.圖形化界面創建命令行式創建在棧上創建在堆上創建為什么傳文本需要QString&#xff0c;std::string不行嗎&#xff1f;那為什么要傳入this指針&#xff1f;為什么new后不用顯示調用delete函數呢&#xff0c;不會造成內存泄漏問題嗎&#xff…

python:__class_getitem__使用以及cached_property源碼分析

python&#xff1a;__class_getitem__使用以及cached_property源碼分析 1 前言 Python中如何模擬泛型類型&#xff1f; 當使用類型標注時&#xff0c;使用 Python 的方括號標記來形參化一個 generic type 往往會很有用處。 例如&#xff0c;list[int] 這樣的標注可以被用來表…

深入 OpenFeign:探索緩存、QueryMap、MatrixVariable 和 CollectionFormat 的高級用法以實現優雅的遠程調用

免費多模型AI網站,支持豆包、GPT-4o、谷歌Gemini等AI模型&#xff0c;無限制使用&#xff0c;快去白嫖&#x1f449;海鯨AI 一、OpenFeign簡介 OpenFeign 是一個聲明式的 HTTP 客戶端&#xff0c;它使得我們可以通過簡單的注解和接口定義來調用遠程 HTTP 服務。與傳統的 HTTP …

K8S集群再搭建

前述&#xff1a;總體是非常簡單的&#xff0c;就是過程繁瑣&#xff0c;不過都是些重復的操作 master成員: [controller-manager, scheduler, api-server, etcd, proxy,kubelet] node成員: [kubelet, proxy] master要修改的配置文件有 1. vi /etc/etcd/etcd.conf # 數…

Mokito的一些API

Mockito是一個Java單元測試框架&#xff0c;它允許開發者創建和配置模擬對象&#xff08;mock objects&#xff09;&#xff0c;以便在隔離的環境中測試代碼&#xff0c;尤其是當實際對象難以構造或其行為不確定時。下面是一些核心的Mockito API及其使用場景和代碼示例。 基礎…

wordpress教程視頻 wordpress教程網盤 wordpress教程推薦wordpress教程網

WordPress&#xff0c;作為一款強大且靈活的開源內容管理系統&#xff0c;已成為許多網站開發者與運營者的首選。其強大的功能、豐富的插件以及易于上手的特點&#xff0c;使得無論是初學者還是專業開發者都能輕松構建出個性化的網站。然而&#xff0c;對于初學者來說&#xff…

JUnit5標記測試用例

使用場景&#xff1a; 通過Tag對用例分組&#xff1a; 環境分組&#xff1a;測試環境、預發布環境階段分組&#xff1a;冒煙用例版本分組&#xff1a;V1.1、V1.2 Tag標記用例&#xff1a; 設置標簽根據標簽執行 結合Maven執行結合測試套件執行 設置標簽&#xff1a; 通過T…

NER 數據集格式轉換

NER 數據集格式 格式一 某些地方的數據和標簽拆成兩個文件了 sentences.txt 如 何 解 決 足 球 界 長 期 存 在 的 諸 多 矛 盾 &#xff0c; 重 振 昔 日 津 門 足 球 的 雄 風 &#xff0c; 成 為 天 津 足 壇 上 下 內 外 到 處 議 論 的 話 題 。 該 縣 一 手 抓 農 業…

【Spring Cloud】全面解析服務容錯中間件 Sentinel 持久化兩種模式

文章目錄 推送模式本地文件持久化&#xff08;拉模式&#xff09;配置yml編寫處理類添加配置演示 配置中心持久化&#xff08;推模式&#xff09;修改nacos在sentinel中生效引入依賴配置文件 修改sentinel在nacos中生效下載源碼更改代碼演示 總結 推送模式 Sentinel 規則的推送…

allegro 無法刪除Xnet

allegro 無法刪除Xnet Orcad中打開Constraint Manager之后&#xff0c;再生成網表&#xff0c;導入PCB后就會出現一堆Xnet網絡。無法去除Xnet。 解決辦法 在原理圖ORCAD中&#xff0c; 1、打開Edit Object properties 2、選擇Filter by:Capture 3、點擊New Property 4、設置…

火山引擎邊緣云亮相 Force 原動力大會,探索 AI 應用新范式

5月15日&#xff0c;2024 春季火山引擎 FORCE 原動力大會在北京正式舉辦。大會聚焦 AI 主題&#xff0c;以大模型應用為核心、以 AI 落地為導向&#xff0c;展示了火山引擎在大模型、云計算領域的實踐應用&#xff0c;攜手汽車、手機終端、金融、消費、互聯網等領域的專家和企業…

2024042102-array-list

數組 Array 一、前言 數組是數據結構還是數據類型&#xff1f; 數組只是個名稱&#xff0c;它可以描述一組操作&#xff0c;也可以命名這組操作。數組的數據操作&#xff0c;是通過 idx->val 的方式來處理。它不是具體要求內存上要存儲著連續的數據才叫數據&#xff0c;而…

js積累三(web頁面一段時間未操作,退出登錄)

//核心代碼&#xff0c;已封裝function CountDownLogout() {/* if 30 seconds no operation then logout */var maxTime 30; // seconds&#xff0c;可自行修改時長var time_time maxTime;/* 鼠標點擊事件 */$(document).mousedown(function(){time_time maxTime; //…

Spring Aop對本地事務的影響

1.Transactional聲明式事物也是基于aop實現的&#xff0c;public方法加了Transactional注解后&#xff0c;已經成功的創建了事務&#xff0c;但是當前方法仍在方法攔截器中 2.業務方法發生異常之后的處理 判斷回滾條件&#xff1a; 如果自定義了RollbackRuleAttribute列表&am…

EI會議的最佳論文獎是什么?如何申請?

EI會議的最佳論文獎通常是指在EI&#xff08;工程索引&#xff0c;Engineering Index&#xff09;收錄的學術會議中&#xff0c;評選出的表現最優秀的論文獎項。以下是關于該獎項的一些基本信息及申請步驟&#xff1a; 最佳論文獎的含義 評選標準&#xff1a;最佳論文獎通常基…

多線程、進程、線程五種狀態、synchronized、volatile、Lock、CAS、死鎖、ThreadLocal

1、并發編程 并發編程三要素 原子性&#xff1a;只一個操作要么全部成功&#xff0c;要么全部失敗可見性&#xff1a;一個線程對共享變量的修改&#xff0c;其他線程能夠立刻看到有序性&#xff1a;程序執行的順序按照代碼的先后順序執行 synchronized&#xff0c;Lock解決原…