巧用Vue3 composition api的计算属性实现扁平化tree连线

本示例节选自vue3最新开源组件实战教程大纲(持续更新中)的tree组件开发部分。将进一步把基于Vue3 composition api的computed计算属性特性应用到组件开发实战中,继续以最佳实践的方式呈现给大家。

下面我们要实现的是扁平化的dom结构所呈现的树形组件增加参照线的功能。
在这里插入图片描述
这种结构不同于传统嵌套dom实现的树作参照线那么简单,需要动态计算线的长度,正好我们可以充分应用vue3给我们提供的composition api的计算属性computed。一切都变得非常简单,Life is so easy!

节点属性

新增节点属性

export interface ITreeNode {...visibleLength?: ComputedRef<number> // 展开可见的节点长度lineLength?: ComputedRef<number> // 节点参照线的长度
}

计算属性

核心的初始化方法

function initParentNode(node: ITreeNode, optionProps: OptionProps) {const nodeRef = ref<ITreeNode>(node)const childrenName = optionProps.childrenName as 'children'// 可见节点长度计算属性node.visibleLength = computed(() => {// 如果不是展开的返回0if (!nodeRef.value.expanded) return 0// 遍历原始树结构的子节点列表,判断如果是父节点,则继续递归调用其visibleLength计算属性// 通过reduce实现累加return nodeRef.value[childrenName]!.reduce((count, cur) => count + (cur[childrenName] ? (cur.expanded ? 1 + cur.visibleLength! : 1) : 1), 0)})// 计算父节点的参照线长度node.lineLength = computed(() => {// 如果是折叠的直接返回0if (!nodeRef.value.expanded) return 0// 否则用可见长度 - 子一代最后一个节点的可见长度const children = nodeRef.value[childrenName]const lastChild = children![children!.length - 1]return nodeRef.value.visibleLength! - (lastChild.visibleLength || 0)})
}

在拍平函数中调用父节点初始化函数:

在这里插入图片描述

组件完善

模板完善

在这里插入图片描述

试着打印父节点的参照线长度

在这里插入图片描述

看下效果:

在这里插入图片描述

展开、折叠,参照线并不会动态变化。修复下:

在这里插入图片描述

再看效果,删除节点测试还有问题:
在这里插入图片描述

修复下:

在这里插入图片描述

完美!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

5G mmWave PAAM 开发平台

Avnet-Fujikura-AMD 5G 毫米波相控阵天线模块开发平台 Avnet 和 Fujikura 为毫米波频段创建了一个领先的 5G FR2 相控阵天线开发平台。该平台使开发人员能够使用 AMD Xilinx 的 Zynq UltraScale™ RFSoC Gen3 和 Fujikura 的 FutureAcess™ 相控阵天线模块 (PAAM) 快速创建和制…

WebRTC音视频-环境搭建

目录 期望效果 1:虚拟机和系统安装 2:WebRTC客户端环境搭建 2.1&#xff1a;VScode安装 2.2&#xff1a;MobaXterm安装 3:WebRTC服务器环境搭建 3.1&#xff1a;安装openssh服务器 3.2&#xff1a;安装Node.js 3.3&#xff1a;coturn穿透和转发服务器 3.3.1&a…

FPGA-计数器

前言 之前一直说整理点FPGA控制器应用的内容&#xff0c;今天就从计数器这个在时序逻辑中比较重要的内容开始总结一下&#xff0c;主要通过还是通过让一个LED闪烁这个简单例子来理解。 寄存器 了解计数器之前先来认识一下寄存器。寄存器是时序逻辑设计的基础。时序逻辑能够避…

MVVM示例程序

目录 一 定义可通知属性 二 定义前端并绑定 三 运行效果 一 定义可通知属性 internal class MainViewModel : ObservableObject{/// <summary>/// 供前端的Command命令Binding调用/// </summary>public RelayCommand ShowCommand { get; set; }public MainViewM…

防火墙之内容安全过滤技术篇

深度行为检测技术&#xff1a;是一种基于应用层的流量检测和控制技术 DPI:针对完整的数据包&#xff0c;进行内容的识别和检测 基于应用网关的检测技术 --- 有些应用控制和数据是分离的&#xff0c;比如一些视频流。一开始会通过TCP协议链接之后&#xff0c;协商一些参数&#…

vue项目源码调试方法 ,chrome调试控制台工作区使用,利用chrome控制台调试vue项目源码的方法 图解

我们在开发vue项目的时候&#xff0c;项目开始后的第一件事情应该就是准备调试工作了&#xff0c;Chrome调试控制台就给我们提供了这样的一个方便的调试工作区。方法为&#xff0c;在Chrome浏览器里面打开你要调试的页面&#xff0c;然后打开调试控制台&#xff0c;如下&#x…

引领小模型潮流!OpenAI发布功能强大且成本低的GPT-4o mini

GPT-4o mini的成本比GPT-3.5 Turbo低了超过60%&#xff0c;其聊天表现优于Google的Gemini Flash和Anthropic的Claude Haiku。该模型从周四开始对ChatGPT的免费用户、ChatGPT Plus用户和团队订阅用户开放&#xff0c;并将在下周向企业用户开放。OpenAI计划未来将图像、视频和音频…

FairGuard游戏加固入选《嘶吼2024网络安全产业图谱》

2024年7月16日&#xff0c;国内网络安全专业媒体——嘶吼安全产业研究院正式发布《嘶吼2024网络安全产业图谱》(以下简称“产业图谱”)。 本次发布的产业图谱&#xff0c;共涉及七大类别&#xff0c;127个细分领域。全面展现了网络安全产业的构成和重要组成部分&#xff0c;探…

uniapp上传功能用uni-file-picker实现

文章目录 html代码功能实现css样式代码 html代码 <uni-file-pickerselect"onFileSelected"cancel"onFilePickerCancel"limit"1"class"weightPage-upload-but"file-mediatype"image"></uni-file-picker><imag…

Python+Flask+MySQL/Sqlite的个人博客系统(前台+后端管理)【附源码,运行简单】

PythonFlaskMySQL/Sqlite的个人博客系统&#xff08;前台后端管理&#xff09;【附源码&#xff0c;运行简单】 总览 1、《个人博客系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 管理员登录2.2 程序主页面2.3 笔记新增界面2.4 文章新增界面2.5 文章/笔记管理界面2…

jenkins+gitlab+harbor+maven自动化容器部署

一、gitlab安装配置 1.1、安装 由于比较懒啊&#xff01;这里就直接使用docker安装了啊&#xff01; 没事先更新一个yum源&#xff1a;yum update -y 整一个gitlab镜像&#xff1a;docker pull gitlab/gitlab-ce 运行一个gitlab容器&#xff1a;docker run -d -p 8443:443 -p…

《蔚蓝档案》电脑版PC端模拟器游玩教程

《蔚蓝档案》电脑版PC端模拟器游玩教程 《蔚蓝档案》是一款主打学园、青春、物语三大特色的二次元角色扮演类手游。作为一款重养成、剧情的手游&#xff0c;沉浸式体验尤为重要。不过很多小伙伴在用手机玩蔚蓝档案时可能经常遇到屏幕太小透明清新的色调不清晰、有时候还会出现…

《数据结构》预备

在学习数据结构之前&#xff0c;需要预先准备学习的C语言知识是&#xff1a;自定义类型--结构体类型。 本节主要讲的内容有&#xff1a; 1.结构体类型的声明 2.结构体变量的创建和初始化 3.结构成员的访问操作符 4.结构体传参 5.结构体内存对齐 6.结构体实现位段(位域) 正文开…

WORD中使用粘贴时发生“Microsoft Visual Basic 运行时错误‘53文件未找到:MathPage.WIL”

WORD中使用粘贴时发生“Microsoft Visual Basic 运行时错误’53文件未找到:MathPage.WIL” 解决方法 1.关闭word 2.找到并打开自己安装的MathType所在文件夹中MathPage.WIL 因为我安装64位&#xff0c;所以打开64位安装路径下的MathPage.WIL 3.把这个文件复制到该目录下&a…

ExcelVBA运用Excel的【条件格式】(四)

ExcelVBA运用Excel的【条件格式】&#xff08;四&#xff09;条件格式FormatConditions.AddTop10方法 【问题】 快速定位到数据的前10或后10 【效果图】 如图 【知识点】 在VBA中&#xff0c;FormatConditions.AddTop10方法用于向Range对象添加一个基于最高或最低数值的条件格式…

ubuntu源码安装Odoo

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo具有非常多的安装方式&#xff0c;除了我最爱用的 apt-get install&#xff0c;我们还可以使用git拉取Odoo源码进行安装。 本次示例于ubuntu20.04 Desktop上进行操作&#xff0c;理论上在ubuntu14.04之后都可以用此操作。 …

Atom - hackmyvm

简介 靶机名称&#xff1a;Atom 难度&#xff1a;简单 靶场地址&#xff1a;https://hackmyvm.eu/machines/machine.php?vmAtom 本地环境 虚拟机&#xff1a;vitual box 靶场IP&#xff08;Atom&#xff09;&#xff1a;192.168.56.101 跳板机IP(windows 11)&#xff1…

分享:一次性查找多个PDF文件,如何根据txt文本列出的文件名批量查找指定文件夹里的文件,并复制到新的文件夹,不需要写任何代码,点点鼠标批量处理一次性搞定

简介&#xff1a; 该文介绍了一个批量查找PDF文件&#xff08;不限于找PDF&#xff09;的工具&#xff0c;用于在多级文件夹中快速查找并复制特定文件。用户可以加载PDF库&#xff0c;输入文件名列表&#xff0c;设置操作参数&#xff08;如保存路径、复制或删除&#xff09;及…

一个自托管免费开源的人脸识别系统

大家好&#xff0c;今天给大家分享一个自托管免费开源的人脸识别系统CompreFace。 CompreFace 是一个开源的人脸识别系统&#xff0c;由 Exadel 公司开发并维护。它提供了一个基于深度学习的解决方案&#xff0c;用于人脸检测、识别和验证。 CompreFace 的设计旨在简化人脸识别…

RV1103使用rtsp和opencv推流视频到网页端

参考&#xff1a; Luckfox-Pico/Luckfox-Pico-RV1103/Luckfox-Pico-pinout/CSI-Camera Luckfox-Pico/RKMPI-example Luckfox-Pico/RKMPI-example 下载源码 其中源码位置&#xff1a;https://github.com/luckfox-eng29/luckfox_pico_rtsp_opencv 使用git clone由于项目比较大&am…