微信小程序实现简单的树形图treeview

app.json的pages里添加这么一行,"pages":[
"pages/index/index",
"pages/logs/logs",
"pages/components/mytree/mytree"
],
ctrl+s或者ctrl+b一下,小程序就自动生成了mytree的文件目录了,相信熟悉小程序开发的都知道。

首先修改mytree.json:
{
"component": true,
}
这表示要开发一个组件(小程序官方说,也能当普通页面使)。
我们使用的树数据treeData将是类似这样的,text字段用于显示,id字段用于点击事件传递数据,nodes就是下一层节点。
var treeData = {
text: 'My Tree',
id: 0,
nodes: [
{
text: 'Parent 1',
id: 1,
nodes: [
{
text: 'Child 1',
id: 2,
nodes: [
{
text: 'Grandchild 1',
id: 3,
},
{
text: 'Grandchild 2',
id: 4,
},
]
},
{
text: 'Child 2',
id: 5,
}
]
},
{
text: 'Parent 2',
id: 6,
nodes: [
{
text: 'Child 1',
id: 7,
},
{
text: 'Child 2',
id: 8,
}
]
}
]
}
先写mytree.wxml,比较简单,model是后面绑定的属性值,也就是树的数据,待会儿看mytree.js就明白了。
<!-- pages/components/mytree/mytree.wxml-->
<view>
<view>
<text wx:if='{{ isBranch }}' bindtap='toggle'>{{ open ? '[ - ]' : '[ + ]' }} </text>
<text wx:else>[ · ] </text>
<text bindtap='tapItem' data-itemid='{{ model.id }}'>{{ model.text }}</text>
</view>
<view style='padding-left: 50rpx;' wx:if='{{ isBranch }}' hidden='{{ !open }}'>
<mytree wx:for='{{ model.nodes }}' wx:key='id' model='{{ item }}'></mytree>
</view>
</view>
这里最关键的是使用了一个递归,也就是组件里使用了组件自己,那就需要回头修改一下mytree.json,如下:
{
"component": true,
"usingComponents": {
"mytree": "../mytree/mytree"
}
}
mytree.js,内容也不多,在data里加了open和isBranch来判断当前节点是否是树枝(相对于树叶)、是否展开,其它没多少要解释的,一开始我也想把这两个字段加到model里面去,好像不方便进行setData,读者可以自己试试。需要说明的是,
triggerEvent方法里需要添加选项设置:this.triggerEvent('tapitem', { nid: nid }, { bubbles: true, composed: true })
不然调用组件的节点接收不到递归里面的事件触发。
// pages/components/mytree/mytree.js
Component({
properties: {
model: Object,
}, data: {
open: false,
isBranch: false,
}, methods: {
toggle: function(e) {
if (this.data.isBranch) {
this.setData({
open: !this.data.open,
})
}
}, tapItem: function(e) {
var itemid = e.currentTarget.dataset.itemid;
console.log('组件里点击的id: ' + itemid);
this.triggerEvent('tapitem', { itemid: itemid }, { bubbles: true, composed: true });
}
}, ready: function(e) {
this.setData({
isBranch: Boolean(this.data.model.nodes && this.data.model.nodes.length),
});
console.log(this.data);
},
})
最后看看使用组件,直接把index.html清空用来测试,相关的几个文件代码如下:
<!--index.wxml-->
<view>
<view class='up'>--------------</view>
<mytree model='{{ treeData }}' bind:tapitem='tapItem'></mytree>
<view class='down'>--------------</view>
</view>
index.json如下:
{
"usingComponents": {
"mytree": "../components/mytree/mytree"
}
}
index.js如下,记得把前文的treeData贴上:
Page({
data: {
treeData: treeData,
},
//事件处理函数
tapItem: function (e) {
console.log('index接收到的itemid: ' + e.detail.itemid);
},
onLoad: function () {
},
})
转载:https://www.jianshu.com/p/dabca0161993
微信小程序实现简单的树形图treeview的更多相关文章
- 微信小程序支付简单小结与梳理
前言 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物来说,可以说是占据了十分重要的一块,毕竟能收到钱才是重点. 当然在开发之前,我们需要有下面这些东 ...
- [转]微信小程序支付简单小结与梳理
本文转自:https://www.cnblogs.com/onetwo/p/6667424.html 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物 ...
- 微信小程序_简单组件使用与数据绑定
简单的数据传值 官方文档:传送门 点击"按钮"测试后,按钮文本改变,下方text文本改变,通过console.log()在输出台中打印按钮文本信息 程序结构 Page({ //页面 ...
- 微信小程序实现简单的2048
这两天心血来潮,用微信小程序写了一个简单的2048,欢迎各位老铁围观,提出宝贵意见.这里我从0到1赘述一下个人实现流程: 首先去微信公平台(https://mp.weixin.qq.com/)注册一个 ...
- 微信小程序之简单记账本开发记录(七)
记账本已经可以实现添加和删除的功能 现在只需要将上述步骤重复一遍便可将另一个界面做出来. 大体上已制作完成,如果在细节上有变动会在这一篇更新 总体来说,这个作业让我对微信小程序的开发有了更多地认识,大 ...
- 微信小程序之简单记账本开发记录(一)
下载并安装微信开发者工具 在选择开发记账本程序的时候犹豫着选择android studio还是微信小程序 最后选择了微信小程序,因其便利和快捷. 话不多说,第一步,下载并安装微信开发者工具.下面是教程 ...
- 微信小程序之简单记账本开发记录(二)
1.打开开发者工具 2.从微信公众平台上获取到appid,或者使用测试号. 项目的大致目录如下: 一个小程序主体部分由三个文件组成,必须放在项目的根目录中 以app为开头的文件名用来布置作用于整个项目 ...
- 微信小程序一些简单的快捷键
常用快捷键 格式调整 Ctrl+S:保存文件Ctrl+[, Ctrl+]:代码行缩进Ctrl+Shift+[, Ctrl+Shift+]:折叠打开代码块Ctrl+C Ctrl+V:复制粘贴,如果没有选 ...
- 微信小程序 table 简单测试
<view class='AutoTable'> <view id='AutoTableItem'> <block wx:for="{{array}}" ...
随机推荐
- day_5.20 py
列表去重的两种方法 1.自己写程序 for循环 2.直接变为set类型
- C - Yogurt factory
The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the next N (1 &l ...
- 从一条巨慢SQL看基于Oracle的SQL优化(重磅彩蛋+PPT)
本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发 ...
- linux系统操作笔记
tar cvf test.tar /etc gzip test.tar bzep2 test.tar 归档压缩 tar czf test.tar.gz /etc vi /etc/test ...
- 【LBS】基于地理位置的搜索之微信 附近的人 简单实现
缘由 本周技术群有一个同学说我们该怎么实现 由近到远的基于地理位置的搜索,我创业做电商的系统做过类似这样的服务,我把我们以前的操作给大家分享下 什么是LBS LBS 全称是 Location Bas ...
- onload和DOMContentLoaded
执行时间 onload必须等到页面内包括图片的所有元素加载完毕后才能执行. DOMContentLoaded是DOM结构绘制完毕后就执行,不必等到加载完毕. 编写个数不同 onload不能同时编写多个 ...
- NPM升级
nmp的更新可以使用自身指令即可: npm install npm -g 可以看到从3.10.10升级到了4.0.5 都说npm比node升级的快,现在比起来nodejs的更新速度更快 如果npm官方 ...
- java jdk安装配置
1. 配置java_home 2. path添加: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 3. 添加CLASSPATH路径: .;%Java_Home%\bin;% ...
- springmvc shiro整合cas单点登入
shiro cas分为登入跟登出 maven依赖: <dependency> <groupId>org.apache.shiro</groupId> <art ...
- 预备作业2 :学习基础和C语言基础调查
剑网三毒经pk心得: 看完标题的你真的没有进错,这里是博客园. 想到写这篇文章的原因一部分是自己的确没啥技能比超过90%以上的人还好,还有一部分是受到了作业提示的指引...... 如果你有类似的技能获 ...