欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 巧用Vue3 composition api的计算属性实现扁平化tree连线

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

2025/2/23 5:02:46 来源:https://blog.csdn.net/felix_alone2012/article/details/140556756  浏览:    关键词:巧用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)})
}

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

在这里插入图片描述

组件完善

模板完善

在这里插入图片描述

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

在这里插入图片描述

看下效果:

在这里插入图片描述

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

在这里插入图片描述

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

修复下:

在这里插入图片描述

完美!

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词