layui 勾选不联动父项 树形控件_layui树形组件重现勾选过程的办法

在layui树形组件中,当顶级权限被勾选时,会默认勾选所有权限,导致无法重现用户的实际勾选状态。解决办法是关注叶子节点,仅设置用户实际勾选的叶子节点为选中。可以通过设置数据源中叶子节点的checked属性为true,或者使用setChecked方法传入叶子节点ID来实现。示例代码展示了如何操作。
摘要由CSDN通过智能技术生成

layui提供了两种初始化节点选中状态的方式

一 tree.setChecked('demoId', [2,13,18,19]); //批量勾选 id 为2,13,18,19 的节点

其中19是用户真实勾选的节点ID,但是组件提交的勾选节点包含全路径.

如果顶级权限被勾选了,那么layui设置节点勾选的时候就会勾选其全部的权限也就是默认就勾选了所有权限。

layui树形组件此时无法重现用户的节点勾选情况了,怎么办?

这个时候就不能从前台的角度来解决问题了,因为layui树形组件的规则就是这样的。

二 通过数据源设置初始选中状态

那这代表我们可以把,2,13,18,19这四个节点的checked属性设置为true吗?不行,如果顶级权限的checked为true,这表示所有权限都处于初始选中状态。

现在我们重新回顾一下树形组件的使用过程:

我们要给某个角色加上角色列表的操作权限,组件于是选中了角色列表和及祖先节点.

当然我们勾选后台角色,那么其子节点角色列表也会被勾选.

如果目标子节点无兄弟节点,这两种选中方式组件勾选的数据相同.

通过勾选父节点选中后代节点的方式可以提高勾选效率,仅此而已。

整个属性组件的使用过程中,我们需要关心的永远只有叶子节点,这是节点初始化选中状态的核心逻辑,也就是说我们把用户真实勾选的,叶子节点,19设置成勾选状态就可以了。

方式一,设置数据源中勾选的叶子节点checked属性为true,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.在页面中引入layui的css和js文件: ``` <link rel="stylesheet" href="/layui/css/layui.css"> <script src="/layui/layui.js"></script> ``` 2.创建一个div作为树形组件的容器: ``` <div id="tree"></div> ``` 3.定义树形组件的数据: ``` var treeData = [{ "id": 1, "name": "节点1", "children": [{ "id": 11, "name": "节点1-1" }, { "id": 12, "name": "节点1-2" }] }, { "id": 2, "name": "节点2", "children": [{ "id": 21, "name": "节点2-1" }, { "id": 22, "name": "节点2-2" }] }]; ``` 4.使用layui.tree组件创建树形结构: ``` layui.use(['tree'], function(){ var tree = layui.tree; tree.render({ elem: '#tree', data: treeData, id: 'treeId', showCheckbox: true, accordion: true, checkArr: [1, 11] //默认勾选节点1和节点1-1 }); }); ``` 其中,id为树形组件的唯一标识,showCheckbox表示是否显示复选框,accordion表示是否开启手风琴模式(只展开一个节点),checkArr表示默认勾选的节点的id数组。 5.获取勾选的节点: ``` var checkedData = layui.tree.getChecked('treeId'); ``` 其中,treeId为树形组件的id。 6.将勾选的节点id数组转换成树形组件需要的格式: ``` var checkedIds = []; for (var i = 0; i < checkedData.length; i++) { checkedIds.push(checkedData[i].id); } var checkedArr = layui.tree.ConvertToArr('treeId', checkedIds); ``` 7.将勾选的节点回显到树形组件中: ``` layui.use(['tree'], function(){ var tree = layui.tree; tree.render({ elem: '#tree', data: treeData, id: 'treeId', showCheckbox: true, accordion: true, checkArr: checkedArr //勾选之前已经勾选的节点 }); }); ``` 完整代码如下: ``` <link rel="stylesheet" href="/layui/css/layui.css"> <script src="/layui/layui.js"></script> <div id="tree"></div> <script> var treeData = [{ "id": 1, "name": "节点1", "children": [{ "id": 11, "name": "节点1-1" }, { "id": 12, "name": "节点1-2" }] }, { "id": 2, "name": "节点2", "children": [{ "id": 21, "name": "节点2-1" }, { "id": 22, "name": "节点2-2" }] }]; layui.use(['tree'], function(){ var tree = layui.tree; tree.render({ elem: '#tree', data: treeData, id: 'treeId', showCheckbox: true, accordion: true, checkArr: [1, 11] //默认勾选节点1和节点1-1 }); var checkedData = layui.tree.getChecked('treeId'); var checkedIds = []; for (var i = 0; i < checkedData.length; i++) { checkedIds.push(checkedData[i].id); } var checkedArr = layui.tree.ConvertToArr('treeId', checkedIds); tree.render({ elem: '#tree', data: treeData, id: 'treeId', showCheckbox: true, accordion: true, checkArr: checkedArr //勾选之前已经勾选的节点 }); }); </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值