vue3 树型视图,利用自定义SFC来定义一个TreeItem,然后进行渲染出一个树形。

1、我们在各种项目中都会碰到树形的视图,所以说这个还是很重要的。

2、项目中我们一般会用现成的组件(ant-design、element)来处理,这里我们使用自定义的方法,提供一个data来处理,比如这样:

最后喧染出来的效果类似如下:

3、定义一个自定义SFC,TreeItem.vue

<script setup>
import { ref, computed } from 'vue'const props = defineProps({model: Object
})const isOpen = ref(false)
const isFolder = computed(() => {return props.model.children && props.model.children.length
})function toggle() {isOpen.value = !isOpen.value
}function changeType() {if (!isFolder.value) {props.model.children = []addChild()isOpen.value = true}
}function addChild() {props.model.children.push({ name: 'new stuff' })
}
</script><template><li><div:class="{ bold: isFolder }"@click="toggle"@dblclick="changeType">{{ model.name }}<span v-if="isFolder">[{{ isOpen ? '-' : '+' }}]</span></div><ul v-show="isOpen" v-if="isFolder"><!--一个可以通过其“name”选项递归渲染自己的组件,(如果使用单文件组件,则从文件名推断)--><TreeItemclass="item"v-for="model in model.children":model="model"></TreeItem><li class="add" @click="addChild">+</li></ul></li>
</template>

说明

isFolder: 是一个计算型的属性,如果model的children不为空,并且这个children的length是大于0的,那么就会变成一个目录的形式,就是说下面有子项目。

isOpen:点击的时候,会切换isOpen的状态,对应的是template中的样式的变化,及“-”,“+”的变化,这样我们看上去就是展开的树形,或者是收缩状态的树形。

+:每一项的TreeItem的最后有一个+号,这样可以点击以后,在+号同级加入一项new stuff项。

ul:通过isOpen+isFolder来进行判断要不要显示子项目,如果都成立,那么就是利用自己TreeItem去递归出所有的子项目,并且如果还有,那么会直接children都显示完成。

这样就是我们使用子组件的优势了。

4、最后,我们建一个App.vue文件,来传递数据给TreeItem:

<!--
一个可以递归渲染自己的嵌套树组件。
你可以双击一个项目将其转变为一个文件夹。
--><script setup>
import { ref } from 'vue'
import TreeItem from './TreeItem.vue'const treeData = ref({name: 'My Tree',children: [{ name: 'hello' },{ name: 'world' },{name: 'child folder',children: [{name: 'child folder',children: [{ name: 'hello' }, { name: 'world' }]},{ name: 'hello' },{ name: 'world' },{name: 'child folder',children: [{ name: 'hello' }, { name: 'world' }]}]}]
})
</script><template><ul><TreeItem class="item" :model="treeData"></TreeItem></ul>
</template><style>
.item {cursor: pointer;line-height: 1.5;
}
.bold {font-weight: bold;
}
</style>

只要将属性model赋值,就可以达到树形的效果。

5、官方地址:https://cn.vuejs.org/examples/#tree

有兴趣可以自己尝试下,我想会有更大的收获。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457039.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据分析与挖掘模型】matlab实现——非线性回归预测模型

一、实验目的 掌握有关非线性回归的理论知识&#xff0c;通过变量代换把本来应该用非线性回归处理的问题近似转化为线性回归问题&#xff0c;并进行分析预测。 二、实验任务 对非线性回归实例进行编码计算&#xff0c;实例如下&#xff1a; 三、实验过程 1.运行非线性回归中…

AJAX—— jQuery 发送 AJAX 请求

1、get 请求 $.get&#xff08;url&#xff0c;[ data ] , [ callback ] , [ type ]&#xff09; url &#xff1a;请求的 URL 地址 data &#xff1a;请求携带的参数 callback &#xff1a;载入成功时回调函数 type &#xff1a;设置返回内容格式&#xff08;xml&#xf…

duilib的应用 在双屏异分辨率的显示器上 运行显示不出来

背景&#xff1a;win11&#xff0c;duilib应用&#xff0c;双显示器&#xff0c;两台分辨率相同&#xff0c;分别设置不同的缩放以后&#xff0c;应用运行以后&#xff0c;程序闪一下消失或者程序还在&#xff0c;但是UI显示不出来。 原因 窗口风格设置不合理&#xff0c;所以…

什么是域名?什么是泛域名?

域名 定义 域名是互联网上用于识别和定位网站或网络服务的名称。它是由一串用点分隔的字符组成&#xff0c;例如 “baidu.com”。就像是现实生活中建筑物的地址&#xff0c;方便用户在互联网的海量信息中找到特定的网站。 结构 域名从右到左依次为顶级域名&#xff08;TLD&…

【Python爬虫系列】_031.Scrapy_模拟登陆中间件

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈…

【ArcGIS微课1000例】0125:ArcGIS矢量化无法自动完成面解决方案

文章目录 一、坐标系统问题二、正确使用自动完成面工具一、坐标系统问题 1. 数据库坐标系 arcgis矢量化的过程中,无法自动完成面,可能是因为图层要素没有坐标系造成的。双击数据库打开数据库属性,可以查看当前数据框的坐标系。 2. 图层坐标系 双击图层,打开图层属性,切…

csa练习1

1、修改当前主机名为rhcsa&#xff0c;设置当前时区为Asia/Shanghai 2、在/home/和/root目录下面创建file1文件和dir1目录 3、在/home/file1文件里面写入内容hello&#xff0c;welcome to home 4、在/root/file1文件里面写入当前的时间并写入内容this is administrator 5、在/r…

Etcd 可观测最佳实践

简介 Etcd 是一个高可用的分布式键值存储系统&#xff0c;它提供了一个可靠的、强一致性的存储服务&#xff0c;用于配置管理和服务发现。它最初由 CoreOS 开发&#xff0c;现在由 Cloud Native Computing Foundation (CNCF) 维护。Etcd 使用 Raft 算法来实现数据的一致性&…

基于GPT的智能客服落地实践

&#x1f4cd;前言 在日常生活中&#xff0c;「客服」这个角色几乎贯穿着我们生活的方方面面。比如&#xff0c;淘宝买东西时&#xff0c;需要客服帮你解答疑惑。快递丢失时&#xff0c;需要客服帮忙找回。报名参加培训课程时&#xff0c;需要客服帮忙解答更适合的课程…… 基…

fpga开发环境总结

这里使用Altera(阿尔特拉&#xff09;Cyclone IV E系列的EP4CE10F17C8开发为例&#xff0c;参考正点原子开发板手册进行总结&#xff0c;。 一&#xff0c;Quartus II介绍。 1&#xff0c;Quartus II 是 Altera 公司的综合性 FPGA 开发软件&#xff0c;可以完成从设…

软件测试人员必问的十大面试题..

在软件测试职位面试中&#xff0c;准备并回答一些常见的必问面试题非常重要。这些问题涵盖了软件测试的关键概念、技术和实践&#xff0c;帮助面试官评估你的能力和经验。理解这些问题的重要性是为了在面试中展示你的专业知识和技能&#xff0c;以及你在软件测试领域的实际应用…

使用RabbitMQ实现延迟消息的完整指南

在分布式系统中&#xff0c;消息队列通常用于解耦服务&#xff0c;RabbitMQ是一个广泛使用的消息队列服务。延迟消息&#xff08;也称为延时队列或TTL消息&#xff09;是一种常见的场景应用&#xff0c;特别适合处理某些任务在一段时间后执行的需求&#xff0c;如订单超时处理、…

零基础Java第十期:类和对象(一)

目录 一、拜访对象村 1.1. 什么是面向对象 1.2. 面向对象与面向过程 二、类定义和使用 2.1. 类的定义格式 2.2. 类的定义练习 三、类的实例化 3.1. 什么是实例化 3.2. 类和对象的说明 四、this引用 4.1. 什么是this引用 4.2. this引用的特性 一、拜访对象村 在…

使用python代码绘制好看的统计图

代码功能 上述代码使用 matplotlib 和 seaborn 生成四种不同的统计图&#xff0c;具体如下&#xff1a; 玫瑰图&#xff1a;在极坐标上绘制柱状图&#xff0c;展示不同角度的数值分布。雷达图&#xff1a;绘制多维数据的雷达图&#xff0c;用于对比不同维度的数值。热力图&am…

<项目代码>YOLOv8煤矿输送带异物识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

java项目之基于web的智慧社区设计与实现(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于web的智慧社区设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于web的智…

【优先算法】双指针 --(结合例题讲解解题思路)(C++)

今日鸡汤&#xff1a; “无人负我青云志&#xff0c;我自踏雪至山巅。” -徐霞客《青云志》 释义&#xff1a;没有人能够帮助我实现我的理想&#xff0c;即使面对再大的困难&#xff0c;我也要踏着积雪&#xff0c;一步步&#xff0c;到达山巅。 目录 1.快乐数 2.盛最多的…

【Unity 安装教程】

Unity 中国官网地址链接 Unity - 实时内容开发平台 | 3D、2D、VR & AR可视化https://unity.cn/首先我们想要安装Unity之前&#xff0c;需要安装Unity Hub&#xff1a; Unity Hub 是 Unity Technologies 开发的一个集成软件&#xff0c;它为使用 Unity 引擎的开发者提供了一…

大一物联网要不要转专业,转不了该怎么办?

有幸在2014年&#xff0c;踩中了物联网的风口&#xff0c;坏消息&#xff0c;牛马的我&#xff0c;一口汤都没喝上。 依稀记得&#xff0c;当时市场部老大&#xff0c;带我去上海参加电子展会&#xff0c;印象最深的&#xff0c;一些物联网云平台&#xff0c;靠着一份精美PPT&a…

从汇编角度看C/C++函数指针与函数的调用差异

函数指针本质上是一个指针变量&#xff0c;只不过这个变量保存的地址是一个函数的地址&#xff0c;那么直接调用函数和通过函数指针调用有没有区别呢&#xff1f;答案是有的&#xff0c;下面的代码是一个直接调用函数和通过指针调用函数的例子&#xff0c;使用gdb反汇编main函数…