这是昨晚加班的时候,用微信小程序写的一个treeview组件。
先来看看效果图吧!
比较简单吧,直接view布局。
移动端实现treeview类似的效果,有大的局限性。首先受设备宽度的影响,如果像PC端那样,显得那么有层次感,在移动设备上,有可能很丑的。这里,有一条线,将同一节点通过一条竖线连接起来,这样,不会因为层次问题,导致内容换行。
<!--pages/demo/demo.wxml--> <import src="/templates/chapter.wxml" /> <view class='tree'> <block wx:for="{{chapters}}" wx:key="item"> <!---list-item beign--> <template is='node' data='{{node:item,expend:item.expend}}' /> <!---list-item end--> <template is='nodes' data='{{nodes:item.children,expend:item.expend}}' /> </block> </view> <!--底部声明 begin--> <view class="page__bd page__bd_spacing"> <view class="weui-footer"> <view class="weui-footer__links"> <navigator url="" class="weui-footer__link">习刷刷</navigator> </view> <view class="weui-footer__text">Copyright © 2018-2032 www.xsstk.com</view> </view> </view> <!--底部声明 end-->
其中引用了一个模板(chapter)。
js中声明了几个方法。
//节点点击事件 nodeClick: function(e) { var list = this.data.chapters; var that = this; this.setTreeValue(e.currentTarget.dataset.id, list, function(t) { t.expend = !t.expend; //如果关闭节点,则递归调用 if (t.expend === false) { that.closeNode(t); } }); this.setData({ chapters: list }); //刷新数据 }, //设置节点值 setTreeValue: function(id, list, callback) { var that = this; for (var i in list) { var node = list[i]; if (node.id === id) { callback && callback(node); return; } //跳出循环 node.children && that.setTreeValue(id, node.children, callback); //递归循环 } }, //关闭节点 closeNode: function(node) { var that = this; node.expend = false; node.children && node.children.forEach(function(t, i) { that.closeNode(t); //递归关闭节点 }); }
人之为学,如饮河海,大饮则大盈,小饮则小颖!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!