el-tree 数据回显父节点和子节点都会被选中 check-strictly关联不关联

ElementUI tree组件 动态渲染编辑时 选择父级时会全选所有的子级(el-tree数据回显父节点和子节点都会被选中)

具体上代码

效果

代码

<el-form-item label="菜单权限">
          <el-tree
            :data="menuOptions"
            show-checkbox
            default-expand-all
            ref="tree"
            node-key="id"
            empty-text="加载中,请稍后"
            :props="defaultProps"
            :default-checked-keys="editordata.menu"
            check-on-click-node
            check-strictly
            @check="checkChange"
          ></el-tree>
        </el-form-item>

js代码

//点击树节点
      checkChange(a) {
        const self = this
        const anode = this.$refs.tree.getNode(a)
        console.log(anode.checked)
        if (anode.checked) {//删除选中的
          this.setParentChecked(anode.parent)
          //点击权限子节点
          anode.childNodes.map(res=>{
            res.checked=true
          })
        } else {//新增选中的
          this.deleteParentChecked(anode.parent)
          this.deleteChildChecked(anode.childNodes)
        }
      },
      setParentChecked(parent) {//如果不是全选中为父级添加半选状态,如果子集全选后,父级也要全选
        const fnode = this.$refs.tree.getNode(parent)
        const isAllChecked = fnode.childNodes.every(k => k.checked && k.indeterminate === false)//子集是否是全选
        if (!fnode.isLeaf) {
          fnode.indeterminate = !isAllChecked//子集是否是全选,如果子集全选,则半选状态为假
          fnode.checked = true
        }
        if (fnode.parent) {
          this.setParentChecked(fnode.parent)
        }
      },
      deleteParentChecked(parent, d = false) {//如果取消子节点的选中, 设置父级节点选中状态
        const fnode = this.$refs.tree.getNode(parent)
        const isAllChecked = fnode.childNodes.some(k => d ? (k.checked || k.indeterminate) : k.checked)//子集是否是全选
        if (!fnode.isLeaf) {
          fnode.indeterminate = isAllChecked//子集是否是全选,如果子集全选,则半选状态为假
          fnode.checked = isAllChecked
          if (fnode.parent) {//如果有父节点,则需要去判断父节点是否选中
            this.deleteParentChecked(fnode.parent, true)
          }
        }
      },
      deleteChildChecked(childNodes) {//删除子节点的勾选状态
        if (childNodes && childNodes.length > 0) {
          childNodes.map(k => {
            k.indeterminate = false
            k.checked = false
            this.deleteChildChecked(this.$refs.tree.getNode(k).childNodes)
          })
        }
      }

特此记录

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值