前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >通过el-tree自定义渲染网页版工作目录,实现鼠标悬浮显示完整名称、用icon区分文件和文件夹等需求

通过el-tree自定义渲染网页版工作目录,实现鼠标悬浮显示完整名称、用icon区分文件和文件夹等需求

作者头像
watermelo37
发布于 2025-01-22 13:44:00
发布于 2025-01-22 13:44:00
11001
代码可运行
举报
文章被收录于专栏:前端专精前端专精
运行总次数:1
代码可运行

一、通过el-tree自定义渲染网页版工作目录

1.1、需求介绍

最近做项目时需要做一些云原生相关的内容,有个需求要在服务器上做临时文件夹作为工作目录,同时要将工作目录映射到docker image中和前端页面上。那么将服务器的本地工作目录渲染到前端页面上是必须要实现的部分,其中从后端API获取本地目录信息后,将数据渲染成自定义的前端工作目录是篇博客将要谈到的主要内容。

本篇博客不讲docker、不讲云原生,想要了解这方面知识的请关注我的其他博客,不了解这些知识的不影响阅读本文。

本文会从前端渲染页面开始,还有一篇博客去讲如何设计后端API读取本地目录,获取文件信息和文件系统层级数据。

传送门:Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现-CSDN博客

1.2、使用el-tree生成文档目录

1.2.1、官方基础用法

官方文档传送门:Tree 树形控件 | Element Plus

这里就简单提一下,具体的可以在官方文档里面看看,最基础的直接导入就行。

①效果
②代码:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <el-tree
    style="max-width: 600px"
    :data="data"
    :props="defaultProps"
    @node-click="handleNodeClick"
  />
</template>

<script lang="ts" setup>
interface Tree {
  label: string
  children?: 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是用来悬浮鼠标的时候提供完整名称的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      <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-tooltip
            class="item"
            effect="light"
            :content="data.label"
            placement="top-start"
          >
            <span>{{ node.label }}</span>
          </el-tooltip>
        </template>
      </el-tree>
③javascript代码

其中getDirectory是从后端获取数据的API,后端数据请参考另一篇博客,treeData是提供的测试数据,如果还没有后端数据可以先用这个数据做测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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事件,真的给后续功能的实现提供了很多帮助,其他的事件方法也很全面,用起来还是很舒服的。

博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【实战经验】ElementUI 的 Tree 组件的基本使用。
事情是这样的,项目最近有个需求。服务器有个图片空间,说白了就是个文件夹。文件夹的结构大家都知道,一层一层的。然后需要在前端以树形展示。
一尾流莺
2022/12/10
1.6K0
【实战经验】ElementUI 的 Tree 组件的基本使用。
Elementui Tree 树形控件删除子节点
要求: Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
王小婷
2021/11/24
2K0
Elementui Tree 树形控件删除子节点
Vue+ElementUI 搭建后台管理系统(实战系列五)
使用ElementUI已经有一段时间了,在一边上手开发后台管理系统的同事,也记录了一些笔记,一直都没有时间将这些零零散散的笔记总结起来,整理成一个比较系统详细一点的教程,可以留着以后来看。
王小婷
2021/11/24
4900
Vue+ElementUI 搭建后台管理系统(实战系列五)
Elementui Tree 树形控件删除功能
vue-element-admin一个基于 vue2.0 和 Eelement 的控制面板 UI 框架,这是使用vue技术栈开发的前端程序员的首选管理系统模板,模板以及非常的成熟了,并且有相关的社区和维护人员,开发时候遇到问题也不要慌。
王小婷
2021/07/29
1.3K0
Elementui  Tree 树形控件删除功能
vue3 实现对el-tree的增删改查
el-tree说简单很简单,说难也难,毕竟里面很多属性需要灵活运用。最近项目开发中运用到el-tree的相关操作,整理如下:
zhouzhouya
2023/10/26
1.7K0
vue3  实现对el-tree的增删改查
教育平台项目前端:项目前后端接口联调,项目上线部署发布
将项目部署到 Tomcat:项目名为 lagou_edu_home,端口号: 8080,使用 war 方式部署
RendaZhang
2020/09/08
2.2K0
vue如何获取Elementui Tree 树形控件当前选中的节点
vue-element-admin一个基于 vue2.0 和 Eelement 的控制面板 UI 框架,这是使用vue技术栈开发的前端程序员的首选管理系统模板,模板以及非常的成熟了,并且有相关的社区和维护人员,开发时候遇到问题也不要慌。
王小婷
2021/11/24
3.3K0
vue如何获取Elementui Tree 树形控件当前选中的节点
vue鼠标移入移出显示和隐藏_labview树形控件卡
我们希望实现鼠标移动至树型结构的结点上就显示按钮,移出就隐藏按钮 实现原理:是通过@mouseenter 和 @mouseleave两个属性来控制鼠标hover的效果,再配合v-show来控制是否展示你需要的控件
全栈程序员站长
2022/09/21
2.8K0
vue鼠标移入移出显示和隐藏_labview树形控件卡
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
最近做项目时需要做一些云原生相关的内容,有个需求要在服务器上做临时文件夹作为工作目录,同时要将工作目录映射到docker image中和前端页面上。那么将服务器的本地工作目录渲染到前端页面上是必须要实现的部分,其中通过后端API读取本地目录,获取文件信息和文件系统层级数据是篇博客将要谈到的主要内容。
watermelo37
2025/01/22
1640
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
要求: Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
王小婷
2021/11/24
1.3K0
Elementui Tree 树形控件,将勾选选中的值放在list集合里面提交
【第三篇】商城系统-基础业务-实现类别管理
JDK8特性:https://blog.csdn.net/qq_38526573/category_11113126.html
用户4919348
2022/09/16
1K0
【第三篇】商城系统-基础业务-实现类别管理
vue+Element实现Tree树形数据展示
组件:https://element.eleme.cn/#/zh-CN/component/tree
王小婷
2021/04/28
2.1K2
vue+Element实现Tree树形数据展示
node快速搭建一个学习资料共享平台
本文要实现的功能比较简单:1、将想要共享的文件分文件夹的组织起来;2、别人可以通过界面进行搜索;3、可以在线预览或下载文件。基于这样的需求,本文分享通过node如何实现这样的功能。
牛老师讲GIS
2023/10/23
1720
node快速搭建一个学习资料共享平台
前端成神之路-vue前端项目03
A.为用户列表中的修改按钮绑定点击事件 B.在页面中添加修改用户对话框,并修改对话框的属性 C.根据id查询需要修改的用户数据
海仔
2021/05/06
1.9K0
10.10.10.1可以设置为网关吗_个人如何做跨境电商
注:product/category路径的/会被替换为product-category 3.在src/views/modules下新建product商品文件夹,然后创建category.vue文件
全栈程序员站长
2022/09/19
9730
10.10.10.1可以设置为网关吗_个人如何做跨境电商
自定义权限功能之角色增删改查及分配路由资源的实现
笔者采用前后端分离项目开发自定义权限功能模块有一段时间了,今天这部分的收尾篇了。在这个系列的文章里笔者后端采用一个开源的springboot项目blog-server,前端采用基于vue和element-ui技术栈的开源项目vue-element-admin先后实现了「根据当前登录用户角色动态加载左侧菜单、用户分页查询和给用户授予角色」等功能的实现。本文则是这个权限功能的扫尾部分,笔者带领大家来继续实现「角色的增删改和给角色分配路由资源」这部分功能,以后有时间的化还会继续补角色-按钮级别的权限控制。为了利于笔者和我的读者朋友往高级开发和架构师方向发展,后面发文的重点将放在redis、rabbitmq、rocketmq和springcloud等分布式技术栈的学习和实践上。
用户3587585
2021/09/29
1.8K0
自定义权限功能之角色增删改查及分配路由资源的实现
Vue电商实践项目(二)
1.实现后台首页的基本布局 2.实现左侧菜单栏 3.实现用户列表展示 4.实现添加用户
用户6808043
2022/02/24
5.1K0
vue 项目中自定义布局与左侧菜单及路由跳转功能的实现(简易版)
在 Vue项目中,实现自定义布局与左侧菜单及路由跳转功能,对于笔者这种不是精通前端开发的同学一向是比较困难的。以前都是在开源项目的基础上扩展自己的功能,比较著名的开源项目 vue-element-admin 就是开源项目的作者通过定义实现的左侧菜单和路由跳转的。不过 vue-element-admin 项目使用的 vue 版本还停留在 vue2,现在市场上新项目普遍都用 vue3 技术了, 但是 vue-element-admin 项目也相应地出了 Vue3 版本,对应的 gitee 仓库地址为:https://gitee.com/youlaiorg/vue3-element-admin.git
用户3587585
2024/05/10
2K0
vue 项目中自定义布局与左侧菜单及路由跳转功能的实现(简易版)
Spring Cloud Alibaba商城实战项目基础篇(day03)
我们需要维护所有菜单以及各种子菜单,子菜单里面可能还有子菜单,所以我们采用递归的方式进行书写。
上分如喝水
2023/03/07
1.4K0
Spring Cloud Alibaba商城实战项目基础篇(day03)
猿实战12——类目属性之动态绑定
猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是问题。更多精彩内容,敬请大家关注公主号猿人工厂,点击猿人养成获取!
山旮旯的胖子
2020/09/14
6950
推荐阅读
相关推荐
【实战经验】ElementUI 的 Tree 组件的基本使用。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验