广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue实现目录树结构
  • 636
分享到

vue实现目录树结构

2024-04-02 19:04:59 636人浏览 独家记忆
摘要

本文实例为大家分享了Vue实现目录树结构的具体代码,供大家参考,具体内容如下 效果图 代码 组件部分 components/leftTree.vue <template>

本文实例为大家分享了Vue实现目录树结构的具体代码,供大家参考,具体内容如下

效果图

代码

组件部分 components/leftTree.vue

<template>
    <div>
        <ul class="all-list">
            <li v-for="(item, i) in list" :key="item.key">
            <!-- Antd的双击功能 这个看个人需求,不需要的话把'<div class="tree-item expend></div>'提取出来就可以了 -->
              <a-dropdown :trigger="['contextmenu']">
                <a-menu slot="overlay">
                  <a-menu-item key="1">
                    打开文件
                  </a-menu-item>
                  <a-menu-item key="2">
                    新建文件
                  </a-menu-item>
                  <a-menu-item key="3">
                    保存
                  </a-menu-item>
                  <a-menu-item key="4">
                    删除
                  </a-menu-item>
                </a-menu>
                <div class="tree-item expend">
                    <div
                        v-if="item.icon === 'file' || item.icon === 'openfile'"
                        class="icon-size"
                        :class="
                            openArr.includes(i) ? 'reduce-icon' : 'expend-icon'
                        "
                        @click="toggle(i)"
                    ></div>
 
                    <i v-if="item.icon === 'file'"
                        ><img src="../assets/file.png"
                    /></i>
                    <i v-if="item.icon === 'openfile'"
                        ><img src="../assets/openfile.png"
                    /></i>
                    <i v-if="item.icon === 'vue'"
                        ><img src="../assets/Vue.png"
                    /></i>
                    <i v-if="item.icon === 'js'"
                        ><img src="../assets/js.png"
                    /></i>
                    <i v-if="item.icon === 'React'"
                        ><img src="../assets/React.png"
                    /></i>
                    <i v-if="item.icon === 'sass'"
                        ><img src="../assets/Sass.png"
                    /></i>
                     <i v-if="item.icon === 'vim'"
                        ><img src="../assets/vimeo.png"
                    /></i>
                     <i v-if="item.icon === 'ts'"
                        ><img src="../assets/ts.png"
                    /></i>
                     <i v-if="item.icon === 'PHP'"
                        ><img src="../assets/php.png"
                    /></i>
                    <i v-if="item.icon === 'less'"
                        ><img src="../assets/less.png"
                    /></i>
                    <i v-if="item.icon === 'java'"
                        ><img src="../assets/java.png"
                    /></i>
                    <i v-if="item.icon === 'c++'"
                        ><img src="../assets/c++.png"
                    /></i>
                    <i v-if="item.icon === 'markdown'"
                        ><img src="../assets/markdown.png"
                    /></i>
                    <i v-if="item.icon === 'py'"
                        ><img src="../assets/py.png"
                    /></i>
                    <i v-if="item.icon === 'Go'"
                        ><img src="../assets/go.png"
                    /></i>
                    <span class="content" @click="changeActive(item, i)">{{
                        item.title
                    }}</span>
                </div>
              </a-dropdown>
 
                <!-- 递归 -->
                <div
                    v-show="openArr.includes(i)"
                    v-if="item.children && item.children.length"
                >
                    <leftTree class="item" :list="item.children"></leftTree>
                </div>
            </li>
        </ul>
    </div>
</template>
 
<script>
export default {
    name: "leftTree",
    data() {
        return {
            openArr: [],
            checkboxIds: [],
        };
    },
    props: {
        list: {
            type: Array,
        },
    },
 
    methods: {
        toggle(i) {
            if (this.openArr.includes(i)) {
                let index = this.openArr.indexOf(i);
                this.openArr.splice(index, 1);
            } else {
                this.openArr.push(i);
            }
        },
        changeActive(item, i) {
            if (!item.children) {
                if (item.icon === "file") {
                    this.toggle(i);
                    item.icon = "openfile";
                } else if (item.icon === "openfile") {
                    this.toggle(i);
                    item.icon = "file";
                } else {
                    alert("最后一个文件");
                }
            } else {
                if (item.icon === "file") {
                    this.toggle(i);
                    item.icon = "openfile";
                } else if (item.icon === "openfile") {
                    this.toggle(i);
                    item.icon = "file";
                }
            }
        },
    },
};
</script>
<style lang='less' scoped>
i {
    line-height: 0;
    img {
      width: 16px;
      height: 16px;
    }
}
.item {
    padding-left: 4px;
}
.bold {
    font-weight: bold;
}
ul {
    line-height: 1.5em;
    list-style-type: none;
    white-space: nowrap;
    position: relative;
}
li {
    list-style-type: none;
    padding: 4px;
    user-select: none;
}
 
.tree-item {
    display: flex;
    align-items: center;
}
.expend {
    position: relative;
}
 
.expend::before {
    content: "";
    position: absolute;
    width: 6px;
    left: 9px;
    top: 10px;
    border-top: 1px dotted #c3c5c8;
}
 
.all-list::before {
    content: "";
    position: absolute;
    width: 1px;
    height: calc(100% - 40px);
    left: 48px;
    top: 20px;
    border-left: 1px dotted #c3c5c8;
}
 
.item .expend::before {
    content: "";
    position: absolute;
    width: 6px;
    left: -11px;
    top: 10px;
    border-top: 1px dotted #c3c5c8;
}
 
.item .all-list::before {
    content: "";
    position: absolute;
    width: 1px;
    height: calc(100% - 12px);
    left: 20px;
    top: 0;
    border-left: 1px dotted #c3c5c8;
}
 
.item ul {
    padding-left: 2em;
}
 
.content {
    padding-left: 4px;
    transition: all 0.2s linear;
    &:hover {
      background: #c3c5c8;
    }
}
.spacing {
    display: inline-block;
    width: 18.5px;
    height: 1em;
}
.icon-size {
    display: inline-block;
    width: 16px;
    height: 16px;
    margin-right: 4px;
}
 
.expend-icon {
    background: url("../assets/Plus.png") no-repeat center;
    background-size: cover;
    width: 9px;
    height: 9px;
}
.reduce-icon {
    background: url("../assets/minus.png") no-repeat center;
    background-size: cover;
    width: 9px;
    height: 9px;
}
 
.ant-dropdown-menu {
  width: 180px;
  background: #353b44;
  li {
    color: #fff;
    padding: 2px 10px;
    &:hover {
      background: rgb(13, 89, 175);
    }
  }
}
</style>

引用区域 views/home.vue

<template>
    <div class="home">
        <tree :list="line" />
    </div>
</template>
 
<script>
import tree from "@/components/leftTree.vue";
 
export default {
    name: "Home",
    components: {
        tree,
    },
    data() {
        return {
            line: [
                {
                    title: "Project",
                    type: 1,
                    key: "1",
                    icon: "file",
                    children: [
                        {
                            title: "index.vim",
                            key: "1-1",
                            type: 3,
                            icon: "vim",
                        },
                    ],
                },
                {
                    title: "Menu",
                    type: 1,
                    key: "2",
                    icon: "file",
                },
                {
                    title: "Components",
                    type: 1,
                    key: "3",
                    icon: "file",
                    children: [
                        {
                            title: "Index",
                            type: 2,
                            key: "3-1",
                            icon: "file",
                            children: [
                                {
                                    title: "index.vue",
                                    type: 3,
                                    key: "3-1-1",
                                    icon: "vue",
                                },
                                {
                                    title: "index.react",
                                    type: 3,
                                    key: "3-1-2",
                                    icon: "react",
                                },
                                {
                                    title: "js",
                                    type: 2,
                                    key: "3-1-3",
                                    icon: "file",
                                    children: [
                                        {
                                            title: "index.js",
                                            type: 3,
                                            key: "3-1-1-1-1",
                                            icon: "js",
                                        },
                                    ],
                                },
                                {
                                    title: "index.sass",
                                    type: 3,
                                    key: "3-1-4",
                                    icon: "sass",
                                },
                                {
                                    title: "index.less",
                                    type: 3,
                                    key: "3-1-5",
                                    icon: "less",
                                },
                            ],
                        },
                        {
                            title: "index.php",
                            type: 3,
                            key: "3-2",
                            icon: "php",
                        },
                    ],
                },
                {
                    title: "node_modules",
                    type: 1,
                    key: "4",
                    icon: "file",
                    children: [
                        {
                            title: "index.java",
                            key: "4-1",
                            type: 3,
                            icon: "java",
                        },
                        {
                            title: "index.go",
                            key: "4-2",
                            type: 3,
                            icon: "go",
                        },
                        {
                            title: "index.py",
                            key: "4-3",
                            type: 3,
                            icon: "py",
                        },
                        {
                            title: "index.c",
                            key: "4-4",
                            type: 3,
                            icon: "c++",
                        },
                        {
                            title: "README.md",
                            key: "4-5",
                            type: 3,
                            icon: "markdown",
                        },
                    ],
                },
            ],
        };
    },
};
</script>

ps: 本人是前端小白,发帖只是为了做笔记,代码可能有很多的优化空间,另外也希望可以帮助到其他有需要的朋友

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: vue实现目录树结构

本文链接: https://www.lsjlt.com/news/144365.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue实现目录树结构
    本文实例为大家分享了vue实现目录树结构的具体代码,供大家参考,具体内容如下 效果图 代码 组件部分 components/leftTree.vue <template>...
    99+
    2022-11-13
  • Linux目录树的结构
    本篇内容介绍了“Linux目录树的结构”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录树的主要部分有root(/)、/USR、/var、/...
    99+
    2023-06-13
  • Angular中directive递归怎么实现目录树结构
    这篇文章主要介绍了Angular中directive递归怎么实现目录树结构,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果图:重点:1. ...
    99+
    2022-10-19
  • vue递归组件实现树形结构
    本文实例为大家分享了vue递归组件实现树形结构,供大家参考,具体内容如下 一、递归组件 什么是递归组件?简单来说就是在组件中内使用组件本身。函数自己调用自己。很多情况下我们呢刷数据的...
    99+
    2022-11-13
  • vue如何实现树形结构表格
    这篇文章主要讲解了“vue如何实现树形结构表格”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现树形结构表格”吧!在el-table中,支持树类型的数据的显示。当 row 中包含&...
    99+
    2023-07-04
  • vue 实现可拖曳的树状结构图
    目录Vue递归组件drag事件最近用vue做了一个小项目--可拖曳的树状结构图。 Vue递归组件 结构通过Vue的递归组件实现 布局使用flex,结构线由CSS伪类实现 需要注意...
    99+
    2022-11-12
  • 如何实现在当前目录生成结构树的批处理dir.bat
    这篇文章主要介绍如何实现在当前目录生成结构树的批处理dir.bat,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!dir.bat代码如下:@rem 此BAT文件名一定不能是"tree.bat&quo...
    99+
    2023-06-09
  • vue-cli目录结构详细讲解
    这篇文章主要讲解了“vue-cli目录结构详细讲解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue-cli目录结构详细讲解”吧!一个vue-cli的项目...
    99+
    2022-10-19
  • python_目录结构
    目录组织方式关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结构。在Stackoverflow的这个问题上,能看到大家对Python目录结构的讨论。 这里面说的已经很好了,我也不打算重新造轮子列举各种不同的方式,这...
    99+
    2023-01-31
    结构 目录
  • linux下怎么用tree命令以树形结构显示文件目录结构
    本篇内容介绍了“linux下怎么用tree命令以树形结构显示文件目录结构”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在ubuntu系统中默...
    99+
    2023-06-13
  • Vue elementUI实现树形结构表格与懒加载
    目录1、实现效果2、后端实现2.1 实体类2.2 数据库中的数据结构2.3 后端接口2.4 swagger测试后端结构功能是否正常3、前端实现3.1 页面中引入el-table组件3...
    99+
    2022-11-12
  • QtQTreeWidget树形结构实现代码
    Qt中实现树形结构可以使用QTreeWidget类,也可以使用QTreeView类,QTreeWidget继承自QTreeView类。树形效果如下图所示: 这是怎么实现的呢?还有点...
    99+
    2022-11-12
  • vue-cli中目录结构的示例分析
    这篇文章将为大家详细讲解有关vue-cli中目录结构的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、├── build // 项目构建(webpack)相关代...
    99+
    2022-10-19
  • 使用JS动态构建目录树
    在使用frameset布局的时候,经常会用到目录树,我们可以把一棵树写死,但是更多的情况是,这棵树需要随时被改动,所以我们期望的是他能够被动态的构建。 MVC,算是了解一点,那本文就...
    99+
    2022-11-12
  • MySQL数据目录结构
    从概念上讲,大多数关系数据库系统是相似的:它们有一系列数据库组成,每个数据库包含一系列数据库表,但每个系统有各自组织其管理的数据方式,MySQL也不例外。缺省地,所有由MySQL服务器mysqld管理的数据...
    99+
    2022-10-18
  • PostgreSQL:源码目录结构
    源码结构 aclocal.m4:config 用的文件的一部分 config/:config 用的文件的目录 config.log: configure:configure 文件 confi...
    99+
    2022-10-18
  • postgre目录结构简介
    postgre目录介绍: ├── base #包含每个数据库子目录的子目录 │   ├── 1 │   │   ├── 112 ...
    99+
    2022-10-18
  • Django 工程目录结构
    Django 工程目录结构你已经配置好你的Heroku账户(译者注:Heroku是一个老牌的免费云空间),并且创建了第一个Heroku应用,让我们来讨论一个非常重要的话题(虽然经常被忽略):Django工程...
    99+
    2022-10-18
  • vue中文件目录结构的示例分析
    这篇文章主要介绍了vue中文件目录结构的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。项目简介基于 vue.js 的前端开发环境,用...
    99+
    2022-10-19
  • Python项目通用的目录结构总结
    一个好的项目结构会让我们在开发中更加得心应手。 对于Web项目,我们通常采用Flask或Django等框架,会有一套适合这种项目的工程目录。 对于爬虫项目,通常有Scrapy等开源框架,也会提供一套适合这种项目的工程目录。 对...
    99+
    2023-01-31
    结构 目录 项目
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作