vue中使用element ui的el-tree树形控件 选中子节点获取不到父节点以及回显问题

一、选中子节点,没全选获取不到父节点的问题

html代码

<el-tree style="margin: 20px 0" ref="tree" node-key="id" show-checkbox default-expand-all :data="allPermissions" :props="defaultProps" :show-checkbox="true"/>

data数据

data() {
            return {
                allPermissions: [],
                defaultProps: {
                    children: 'children',
                    label: 'name'
                },
                roleInfo: {},
                buttonLoading: true
            };
        },

使用getHalfCheckedKeys和getCheckedKeys获取数据然后合并两个数组

// 获取选中的父节点
let parentId = this.$refs.tree.getHalfCheckedKeys()
// 获取选中的子节点
let permissionId = this.$refs.tree.getCheckedKeys()
// 合并
let mergeArr = parentId.concat(permissionId);
this.roleInfo.permissions = mergeArr.length > 0 ? mergeArr.join(",") : ''
console.log('parentId',parentId);
console.log('permissionId',permissionId);
console.log('he',mergeArr);
console.log('roleInfo',this.roleInfo);
//提交数据操作

特别注意 :只有element ui的版本是2.2.2往上才可以

二、回显问题

json数据格式如下

{
    "msg": "成功",
    "code": 200,
    "data": {
        "items": [
            {
                "id": 16,
                "name": "sdfsdf2222",
                "children": [
                    {
                        "id": 43,
                        "name": "111",
                        "children": [
                            {
                                "id": 45,
                                "name": "添加",
                                "children": []
                            },
                            {
                                "id": 46,
                                "name": "修改",
                                "children": []
                            },
                            {
                                "id": 47,
                                "name": "删除",
                                "children": []
                            }
                        ]
                    }
                ]
            },
            {
                "id": 18,
                "name": "大师傅地方",
                "children": [
                    {
                        "id": 34,
                        "name": "fghfg",
                        "children": []
                    },
                    {
                        "id": 42,
                        "name": "撒旦发射点",
                        "children": []
                    }
                ]
            },
            {
                "id": 19,
                "name": "的风格",
                "children": []
            },
            {
                "id": 36,
                "name": "xcvxs",
                "children": []
            },
            {
                "id": 37,
                "name": "撒旦发射点",
                "children": []
            },
            {
                "id": 38,
                "name": "士大夫",
                "children": []
            },
            {
                "id": 39,
                "name": "士大夫",
                "children": []
            }
        ],
        "role": {
            "id": 2,
            "name": "ceshi2",
            "permissions": [
                "16",
                "43",
                "45"
            ]
        }
    }
}

实际使用setCheckedKeys的效果并不是我们想要的效果

看文档使用setChecked循环给值

代码

let result = await this.$API.role.reqRolePermission(roleId);
if(result.code == 200){
    if(result.data.role.permissions.length > 0){
        
        result.data.role.permissions.forEach((item) => {

            // 确保组件已挂载并且数据准备完毕
            this.$nextTick(() => {
                // 使用 setChecked 方法
                this.$refs.tree.setChecked(item, true, false);
            });
           
        });
    }
}

setChecked函数的效果

注意:如果setChecked没有效果的话一定要用 this.$nextTick 确保组件已挂载并且数据准备完毕

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daotianmi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值