el-tree显示多选框和提示框

html代码

<el-tree
	 ref="treeTree"
	 :data ="treeData"
	 node-key ="id"
	 draggable
	 check-strictly
	 show-checkbox
	 @check="handleCheckChange"
	  :render-content="renderContent"
>

js代码

handleCheckChange (data, checked) {
      // data // 当前选中节点的信息
      // checked // 所有选中节点组成的信息集合
      if (checked.checkedKeys.length > this.max) {
        this.$message.warning('最多可选' + this.max + '个')
        this.$refs.tree.setChecked(data, false, false)  //设置节点的选中状态
      } else {
        this.checkedData = checked.checkedNodes
        this.checkIdArr = checked.checkedKeys
        this.$refs.tree.setCheckedKeys(checked.checkedKeys)
     }
},
renderContent (h, { node, data, store }) {
      return (
        <span class="icon-span">
          <el-tooltip class="item" effect="light" placement="right">
            <div slot="content">
              <div>{node.label}</div>
              <div>
                <span>描述:</span>
                <span>{data.desc}</span>
              </div>
            </div>
            <span class="rotate"><i class={data.icon}></i></span>
          </el-tooltip>
        </span>
      )
    }

css代码

.el-tree-node__expand-icon.is-leaf {
    display: none
  }
  .custom-tree-node {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 14px;
    padding-right: 8px;
  }
  [class*="el-icon-more"], [class^=el-icon-more] {
    transform: rotate(90deg);  //显示更多的icon旋转
  }
  .el-tree-node {
    white-space: pre-wrap;
    text-align: justify;
    margin: px2rem(5) 0
  }
  .el-tree {
    overflow: hidden;
    // 不可全选样式
    .el-tree-node {
      .is-leaf + .el-checkbox .el-checkbox__inner {
        display: inline-block;
      }
      .el-checkbox .el-checkbox__inner {
        display: none;
      }
    }
  }

注意:
问题:当需要显示checkbox时,会出现当子节点全部都勾选时,父节点会自动勾选,这会使勾选的数据自动增多。
解决:
在tree中加入check-strictly属性
问题:使有子节点的父节点隐藏多选框
解决:
使用css将其隐藏

el-tree {
    overflow: hidden;
    // 不可全选样式
    .el-tree-node {
      .is-leaf + .el-checkbox .el-checkbox__inner {
        display: inline-block;
      }
      .el-checkbox .el-checkbox__inner {
        display: none;
      }
    }
 }

问题:
如果需要实时根据勾选状态显示不同的数据时,建议使用check方法,而不用check-change。
因为check-change是当勾选状态发生变化时就会执行,所以不管选中还是取消选中都会执行回调函数;
而check可以在选中时新增数据,取消选中时自动删除数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue2中,可以使用element-ui的el-tree组件实现多选框。通过设置show-checkbox属性为true,可以在每个节点前添加一个复选框。然后可以使用check-change事件来监听勾选状态的改变,并通过refs获取勾选的节点数据。 在给el-tree绑定的check-change事件中,可以通过this.$refs.tree.getCheckedKeys()来获取目前被选中的节点的key所组成的数组,通过this.$refs.tree.getCheckedNodes()来获取目前被选中的节点所组成的数组。根据获取的勾选节点数量与treeData的数量进行比较,可以判断是全选、反选还是半选。通过设置v-model来控制全选或反选的状态。 示例代码如下: ```html <template> <el-checkbox v-model="checkecd" :indeterminate="indeterminate" @change="checkedAll">全部</el-checkbox> <el-tree :props="props" :data="treeData" ref="tree" accordion show-checkbox node-key="id" :expand-on-click-node="false" @check-change="handleCheckChange"></el-tree> </template> <script> export default { data() { return { checkecd: false, // 是否全选 indeterminate: false, // 是否半选 treeData: [], // 树的数据 props: { // 树节点的属性配置 } }; }, methods: { handleCheckChange(item, isChecked) { // 获取勾选的数据 let checkNode = this.$refs.tree.getCheckedKeys(); // 目前被选中的节点的 key 所组成的数组 let checkNodeName = this.$refs.tree.getCheckedNodes(); // 返回目前被选中的节点所组成的数组 // 如果勾选数量等于拉平后的treeData的数量,则是全选,反之为反选 if (checkNode.length === this.treeData.length) { this.checkecd = true; this.indeterminate = false; } else if (checkNode.length === 0) { this.checkecd = false; this.indeterminate = false; } else { this.indeterminate = true; } }, checkedAll(isChecked) { // 全选/反选 if (isChecked) { this.$refs.tree.setCheckedNodes(this.treeData); } else { this.$refs.tree.setCheckedNodes([]); } } } }; </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值