el-tree父子节点自定义联选

树控件联选问题,要求为点击上级节点自动联选所有下级节点,而点击任意节点都可单独取消选中。

要求效果如下:

el-tree结构如下:

<el-tree
     class="tree"
     v-model="form.orgIdList"
     :data="orgData"
     :props="defaultProps"
     default-expand-all
     show-checkbox
     node-key="orgId"
     :check-strictly="true"
     :filter-node-method="filterNode"
     ref="tree_unit"
     @check="checkChange"
>
</el-tree>

使用 :check-strictly="true" 的效果为严格的遵循父子互相关联,无法单独取消某一节点的选中。

具体解决方法是在el-tree提供的@check事件(点击节点复选框后触发的事件)中绑定checkChange方法。

checkChange方法如下:

    /**
     * @function: 自定义联选
     * @param {*}
     */
    checkChange(data) {
      const _this = this
      // 获取当前节点是否被选中
      const isChecked = this.$refs.tree_unit.getNode(data).checked
      // 如果当前节点被选中,则遍历上级节点和下级子节点并选中           
      //如果当前节点取消选中,则遍历下级节点并取消选中
      if (isChecked) {
        // 判断是否有上级节点,如果有那么遍历设置上级节点选中
        // data.parentValue &&
        //   data.parentValue !== '0' &&
        //   setParentChecked(data.parentValue)
        // 判断该节点是否有下级节点,如果有那么遍历设置下级节点为选中
        data.children && setChildreChecked(data.children, true)
      }
      // else {
      //   // 如果节点取消选中,则取消该节点下的子节点选中
      //   data.children && setChildreChecked(data.children, false)
      // }
      // function setParentChecked(parentValue) {
      //   // 获取该parentValue的父级node
      //   const parentNode = _this.$refs.tree_unit.getNode(parentValue)
      //   // 如果该parentValue的父级node存在父级id则继续遍历
      //   parentNode &&
      //     parentNode.data &&
      //     parentNode.data.parentValue &&
      //     setParentChecked(parentNode.data.parentValue)

      //   //  设置该parentValue的节点为选中状态
      //   _this.$refs.tree_unit.setChecked(parentValue, true)
      // }
      function setChildreChecked(node, isChecked) {
        node.forEach(item => {
          item.children && setChildreChecked(item.children, isChecked)
          _this.$refs.tree_unit.setChecked(item.orgId, isChecked)
        })
      }
    },

该方法中包含了其他的联选方式,如取消选中父节点连带取消所有子节点等,可以根据自己需求进行修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值