elementUI的el-tree的赋值回显问题

el-tree

default-checked-keys

正常回显已经选中的值是 用(default-checked-keys)这个属性

// An highlighted block  
<el-tree
  ref="menuTree"
  :data="allMenu"
  show-checkbox
  node-key="id"
  :default-expand-all="true"
  :default-checked-keys="roleMenu"
  :props="defaultProps"
  @check="changeMenu">
</el-tree>
// 点击保存传值时需要将两个数组合并
const menuIds = this.$refs.menuTree.getCheckedKeys()
const halfMenuIds = this.$refs.menuTree.getHalfCheckedKeys()
const allMenuIds = menuIds.concat(halfMenuIds)

但是由于传值时需要把父节点的值传递过去。getCheckedKeys + getHalfCheckedKeys。

保存时如下图

+在这里插入图片描述

保存后再次编辑时回显会如下图一样 (系统管理会自动勾选中)

在这里插入图片描述

回显菜单树时需要对返回的数据处理,把系统管理 菜单 的id去掉

// allMenu就是整个菜单树 []
// roleMenu 就是当前选中的菜单id数组节点 ['111', '2222']
// 循环遍历整个树  
 const newRoleMenu = [] // 处理数据后的菜单数组
 this.allMenu.forEach(item => {
    if (this.roleMenu.includes(item.id)) {
      if (item.hasChildren) { // 是否有子菜单
      	// 默认一级菜单 下的子菜单,都选中时保留该id, 否则去掉
        let isAllChecked = true 
        item.children.forEach(subItem => {
          if (isAllChecked && !this.roleMenu.includes(subItem.id)) {
            isAllChecked = false
          }
          if (this.roleMenu.includes(subItem.id)) {
            newRoleMenu.push(subItem.id)
          }
        })
        if (isAllChecked) {
          newRoleMenu.push(item.id)
        }
      } else {
        newRoleMenu.push(item.id)
      }
    }
  })

有问题可以评论沟通交流,tree的坑还是较多

链接: elemetUI el-drawer头部样式问题,header样式被黑线框住.

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
你好!关于 el-tree 组件的选中回显问题,我可以为你提供一些帮助。当你在 el-tree 中选中一个节点时,可以通过修改对应节点的属性来实现选中状态的回显。 首先,你需要给 el-tree 组件绑定一个 v-model,将选中的节点绑定到一个变量上。例如: ```html <el-tree v-model="selectedNode" :data="treeData"></el-tree> ``` 其中,`treeData` 是 el-tree 的数据源,`selectedNode` 是一个变量,用于存储选中的节点。 接下来,在你需要进行选中回显的时候,可以修改 `selectedNode` 变量的值。例如,假设你有一个按钮,点击按钮后希望选中 id 为 1 的节点: ```html <button @click="selectNode(1)">选中节点1</button> ``` 然后,在 Vue 实例的方法中实现 `selectNode` 方法: ```javascript methods: { selectNode(id) { // 根据 id 找到对应的节点 const node = this.findNodeById(id, this.treeData); // 将节点设置为选中状态 this.$set(node, 'selected', true); }, findNodeById(id, nodes) { for (const node of nodes) { if (node.id === id) { return node; } if (node.children) { const found = this.findNodeById(id, node.children); if (found) { return found; } } } return null; } } ``` 在 `selectNode` 方法中,首先通过 `findNodeById` 方法找到 id 对应的节点,然后使用 `$set` 方法将节点的 `selected` 属性设置为 `true`,这样 el-tree 组件就会自动选中该节点。 希望这些信息能够对你有所帮助!如果还有其他问题,请随时提问。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值