LayUi框架中树形组件tree官方还在持续完善中,目前最新版本为v2.5.5
官方树形组件目前还不支持懒加载方式,我自己修改了下最新源码tree.js,简单粗暴的方式支持懒加载模式。(Ps:最新更新2019-9-23 09:59:00)
我的解决方案如下:
1、官方树形组件,默认当子节点无数据时不显示展开图标和操作,这里通过注释以下代码,子节点children: [] spread: false 时,显示+号,可以点击展开动作。
2、封装spread事件,当展开时触发回调,返回参数中包含data:当前节点数据,state:值为false子节点无数据,elem:当前节点元素,下面代码修改中,发现原有变量a冲突,所以替换为aa。(已修复手风琴模式下子节点无法隐藏问题)
3、上面修改后展开操作事件有了,下一步就是怎么样去充填子节点数据?我这里最终的方案是利用tree.reload(id,data)方法,将本地数据中找到当前索引节点位置,
通过懒加载方式获取子节点数据充填原有数据当中,最终调用reload方法重载组件。(更新递归所有子节点,计算当前所有节点展开状态)
说明:function (e, i, d) 参数e为 tree实例唯一索引id;参数i=obj.data.id 当前展开节点id;参数d为异步获取的子节点数据[]。
调用例子:
layui.use('tree', function () { var tree = layui.tree; //渲染 var inst1 = tree.render({ elem: '#treelist' , id: 'treelist' , showCheckbox: !1 //复选框 , showLine: !0 //连接线 , accordion: !1 //手风琴模式 , onlyIconControl: !1 //左侧图标控制展开收缩 , isJump: !1 //弹出新窗口跳转 , edit: !1 //开启节点的操作 , data: [{ id: '144115188075855872' , title: '哈尔滨市第三中学' , spread: true , children: [{ id: '144396663052566528' , title: '2016级学生' , children: [{ id: '144397762564194304' , title: '2016级一班' }, { id: '144398862075822080' , title: '2016级二班' }, { id: '144399961587449856' , title: '2016级三班' }] }] }, { id: '144678138029277184' , title: '教职工' , spread: false , children: [] }] , text: { defaultNodeName: '无数据' , none: '加载数据失败!' } , click: function (obj) { console.log(obj.data); //得到当前点击的节点数据 // console.log(obj.state); //得到当前节点的展开状态:open、close、normal // console.log(obj.elem); //得到当前节点元素 // console.log(obj.data.children); //当前节点下是否有子节点 } , oncheck: function (obj) { console.log(obj.data); //得到当前点击的节点数据 console.log(obj.checked); //得到当前节点的展开状态:open、close、normal console.log(obj.elem); //得到当前节点元素 } , spread: function (obj) { if (!obj.state) { // 懒加载子节点,异步获取data数据 这里根据obj.data.id像后台请求当前节点数据 // 这里模拟3层用IF判断来测试,实际不需要 if (obj.data.id === '144678138029277184') { //第二层节点数据 tree.children(inst1.config.id, obj.data.id, [{ id: '101' , title: '子节点1' }, { id: '102' , title: '子节点2' , spread: false , children: [] }]); } if(obj.data.id === '102'){ //第三层节点数据 tree.children(inst1.config.id, obj.data.id, [{ id: '10201' , title: '子节点3' }, { id: '10202' , title: '子节点4' , spread: false , children: [] }]); } if(obj.data.id === '10202'){ //第四层节点数据 tree.children(inst1.config.id, obj.data.id, [{ id: '1020201' , title: '子节点5' }, { id: '1020202' , title: '子节点6' }]); } } // console.log(obj.data); // console.log(obj.state); // console.log(obj.elem); } }); });
tree.js 下载地址在回复区可见。(layui-v2.5.5版本替换tree.js可用)