Element-Plus组件Tree树形控件时,传输失去父节点和回显父节点下的子节点全选问题解决

使用环境

Vue 3 in Vite

Element-Plus

JS语法(非TS)

问题描述:

在使用Element-Plus组件Tree树形控件时,会出现如下问题:

1、子节点未全选时,往后端传输的选中节点没有包含父节点。

如下图,往后端传选中节点时,无法传输父节点Level one 2的信息

2、从后端获取数据渲染时,如果获取的数据不是全选的,回显时父节点下的所有数据会自动全选。

如下图,当我只传输父节点下的部分节点时,我获取数据会显示父节点下的所有子节点会自动全选。

解决问题:

组件在页面中的显示代码

复制代码
<template>
  <div>
    <el-tree ref="rabcTree" :data="menuListData" show-checkbox node-key="id" :props="defaultProps" />
  </div>
</template>
<script setup>
// 只展示关键代码
const rbacChecked = ref([])
const menuListData = ref([])
const defaultProps = ref({
    children: 'children',
    label: 'name'
})
</script>

1、子节点未全选时,往后端传输的选中节点没有包含父节点。解决办法如下:

复制代码
function editRbac() {
    // 此处获取已选取的节点,不包含父节点
    let permissionids = rabcTree.value.getCheckedKeys(false)
    // rabcTree.value.getHalfCheckedKeys()获取的是父节点,通过concat将父节点拼接,传入后端
    const permissionParams = {
        // 获取全选中的id
        ids: permissionids.concat(rabcTree.value.getHalfCheckedKeys()),
        // 将两个数组进行拼接
        id: roleid.value
    }
    authorizePut(permissionParams).then(response => {
        ElMessage({
            message: '修改成功!',
            type: 'success',
            duration: 5 * 1000
            })
    })
}

2、从后端获取数据渲染时,如果获取的数据不是全选的,回显时父节点下的所有数据会自动全选。解决办法如下:

复制代码
// 处理子父节点关联问题,在请求数据方法获取后添加以下代码
nextTick(() => {
    rbacChecked.value.forEach((i, n) => {
    let node = rabcTree.value.getNode(i);
    // 如果是叶子节点就设置
    if (node.isLeaf) {
        rabcTree.value.setChecked(node, true, true);
    }
     else{
        rabcTree.value.setChecked(node, true);
    }
    });
});

原文地址:http://www.article.wang/portal/article/8

相关推荐
brzhang3 分钟前
Flutter 调用原生代码,看这篇就够了:从零教你搭起通信的桥
前端·后端·架构
程序员小张丶3 分钟前
React Native在HarmonyOS 5.0阅读类应用开发中的实践
javascript·react native·react.js·阅读·harmonyos5.0
EndingCoder4 分钟前
React Native 是什么?为什么学它?
javascript·react native·react.js
袁煦丞4 分钟前
知识管理的六边形战士Trilium Notes:cpolar内网穿透实验室第520个成功挑战
前端·程序员·远程工作
失败又激情的man13 分钟前
python爬虫之数据存储
前端·数据库·python
互联网搬砖老肖14 分钟前
Web 架构之 API 安全防护:防刷、防爬、防泄漏
前端·安全·架构
摸鱼仙人~25 分钟前
Redux Toolkit 快速入门指南:createSlice、configureStore、useSelector、useDispatch 全面解析
开发语言·javascript·ecmascript
小声读源码1 小时前
【技巧】dify前端源代码修改第一弹-增加tab页
前端·pnpm·next.js·dify
假客套1 小时前
2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
前端·uni-app·旅游
程序员小张丶1 小时前
基于React Native开发HarmonyOS 5.0主题应用技术方案
javascript·react native·react.js·主题·harmonyos5.0