面包屑-文件夹

2024-04-30 18:12
文章标签 文件夹 面包屑

本文主要是介绍面包屑-文件夹,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.需求:

类似于 百度网盘、阿里云盘的 云文件夹管理功能
在这里插入图片描述

2.问题点

1.页面刷新 导致面包屑子级未持久化

2.浏览器的 前进、后退 ;面包屑未能 跳转到指定 子级

3.数据不同步问题

3.解决方法

1.后端提供 根据 id 查询面包屑 text 的 api【这里并没有提供】

2.建立自己的 map 库,并自行进行对比选择

3.监听浏览器 前进后退


《思路灵感》

当时一直没有很好的思路,周末在刷手机的时候,看到有一名up主在玩“红警”;他说:“我们前期先 用狗子 进行地图的探索”……

💡 那我们也可以让用户 建立自己的 map


【url 说明】

http://localhost:8080/#/cloud/myf 【根路径】

http://localhost:8080/#/cloud/myf?id=1782957532607504385&path=0,1782957532607504385【非跟路径,文件夹id 为 1782957532607504385 的目录下;path 路径为 0<根路径>,1782957532607504385<文件夹>】

核心代码

监听浏览器是否点击了前进或后退

【其中 getFileList 是选择性加载 table 中的数据,比如判断是 根路径<默认加载第一页数据>;子路径<根据id查询子数据第一页数据> 等】

window.addEventListener("popstate", async function (evt) {await getFileList()await checkRouter()
}, false);

这里只展示 checkRouter 的核心对比方法【详细参数说明参考方法下面】

/*** 面包屑核心对比 过程*/
const checkRouter = async () => {const pathTemplateDb = sessionStorage.getItem("pathTemplateDb")if (pathTemplateDb) {const pathTemplateDbObj = await JSON.parse(pathTemplateDb);const path = route.query.path ? route.query.path.split(',') : "0"const targetArray = []if (path === "0") {targetArray.push({path: "0", text: "全部文件", tag: "0"})} else {for (let i = 0; i < pathTemplateDbObj.length; i++) {for (let j = 0; j < path.length; j++)if (pathTemplateDbObj[i].tag === path[j]) {targetArray.push(pathTemplateDbObj[i])}}}pathArray.value = targetArray;sessionStorage.setItem('pathArray', JSON.stringify(pathArray.value))}
}

【说明 1 】pathArray 是记录 要显示的 面包屑的实时路径 数组

<el-breadcrumb separator="/"><el-breadcrumb-item v-for="(item, index) in pathArray" :key="item.path"@click.native.stop="handleClick(item, index)"><spanstyle="cursor: pointer">{{ item.text }}</span></el-breadcrumb-item>
</el-breadcrumb>
// 面包屑
const pathArray = ref([{path: '0', text: '全部文件', tag: "0"}
])

【说明 2】handleClick 是 点击面包屑 实现 路径的切换

核心代码

const handleClick = throttle(async (item, index) => {...const targetIndex = findIndexWithTag(pathArray.value, item.tag);if (item.tag !== "0") {// 子路由await router.push({path: route.path, query: {id: item.tag, path: item.path}})} else {// 根路由await router.push({path: route.path})}pathArray.value = pathArray.value.slice(targetIndex, targetIndex + 1)...
})// 寻找到 用户点击的 面包屑的值的索引值,并且后面的子路径都不要了
function findIndexWithTag(jsonData, flag) {for (var i = 0; i < jsonData.length; i++) {if (jsonData[i].tag === flag) {return i;}}return -1;
}

【说明 3】enterDirectory 是用户点击文件夹 进入文件夹的操作【这里其实就是 “狗子” 建立map 的过程 pathTemplateDb 就是用户自己的 map】

// 自己构建的 map 
const pathTemplateDb = ref([{path: '0', text: '全部文件', tag: "0"}
])const enterDirectory = throttle(async (row) => {...// 是文件夹const filterTagsArray = pathArray.value.map(item => item.tag)const targetPath = [...filterTagsArray, row.id].join(',')tempRouter.value = targetPath;pathArray.value.push({path: targetPath, text: row.fileName, tag: row.id})const target = JSON.parse(sessionStorage.getItem('pathTemplateDb')) || [{path: '0', text: '全部文件', tag: "0"}]//当用户首次进入文件夹的时候建立 map 《防止其中有重复的内容》if (!target.filter(_ => _.tag === row.id).length >= 1) {pathTemplateDb.value = [...target, {path: targetPath,text: row.fileName,tag: row.id}]sessionStorage.setItem('pathTemplateDb', JSON.stringify(pathTemplateDb.value))}// 数据持久化sessionStorage.setItem('pathArray', JSON.stringify(pathArray.value))...
})

小结

  1. 总得来说就是两个数组pathArray、pathTemplateDb、url 之间的操作,根据 url 中的 id 或 path 从 pathTemplateDb 查询对应数据 并 实时更改 pathArray
  2. 灵感来源于生活处处地方

这篇关于面包屑-文件夹的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949563

相关文章

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

一文教你Python引入其他文件夹下的.py文件

《一文教你Python引入其他文件夹下的.py文件》这篇文章主要为大家详细介绍了如何在Python中引入其他文件夹里的.py文件,并探讨几种常见的实现方式,有需要的小伙伴可以根据需求进行选择... 目录1. 使用sys.path动态添加路径2. 使用相对导入(适用于包结构)3. 使用pythonPATH环境

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

Python重命名文件并移动到对应文件夹

《Python重命名文件并移动到对应文件夹》在日常的文件管理和处理过程中,我们可能会遇到需要将文件整理到不同文件夹中的需求,下面我们就来看看如何使用Python实现重命名文件并移动到对应文件夹吧... 目录检查并删除空文件夹1. 基本需求2. 实现代码解析3. 代码解释4. 代码执行结果5. 总结方法补充在

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用