LayUi树形组件tree实现懒加载模式,展开⽗节点时异步加载
⼦节点数据
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、上⾯修改后展开操作事件有了,下⼀步就是怎么样去充填⼦节点数据?我这⾥最终的⽅案是利⽤load(id,data)⽅法,将本地数据中到当前索引节点位置,
通过懒加载⽅式获取⼦节点数据充填原有数据当中,最终调⽤reload⽅法重载组件。(更新递归所有⼦节点,计算当前所有节点展开状态)
说明:function (e, i, d) 参数e为 tree实例唯⼀索引id;参数i=obj.data.id 当前展开节点id;参数d为异步获取的⼦节点数据[]。
调⽤例⼦:
layui.use('tree', function () {
var tree = ;
//渲染
var inst1 = der({
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'
layui下载
, 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.fig.id, obj.data.id, [{
id: '101'
, title: '⼦节点1'
}, {
id: '102'
, title: '⼦节点2'
, title: '⼦节点2'
, spread: false
, children: []
}]);
}
if(obj.data.id === '102'){ //第三层节点数据
tree.fig.id, obj.data.id, [{
id: '10201'
, title: '⼦节点3'
}, {
id: '10202'
, title: '⼦节点4'
, spread: false
, children: []
}]);
}
if(obj.data.id === '10202'){ //第四层节点数据
tree.fig.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可⽤)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。