element的select和tree树形组件组合

本文介绍了如何在Vue中使用el-select和el-tree组件实现多级选择的联动,并展示了如何通过监听节点勾选变化来同步数据状态。重点讲解了`v-model`绑定和`@check-change`事件的使用。
摘要由CSDN通过智能技术生成

效果
在这里插入图片描述

<body>
  <div id="app">
    <el-select v-model="mineStatus" placeholder="请选择" multiple @change="selectChange">
      <el-option :value="mineStatusValue" style="height: auto">//option展开高度太小,把height设置为auto就好啦
        <el-tree :data="data" show-checkbox node-key="id" ref="tree" highlight-current :props="defaultProps"
          @check-change="handleCheckChange"></el-tree>
      </el-option>
    </el-select>

  </div>
  <script>
    new Vue({
      el: "#app",
      data: function () {
        return {
          mineStatus: "",
          mineStatusValue: [],
          data: [
            {
              id: 1,
              label: "一级 1",
              children: [
                {
                  id: 4,
                  label: "二级 1-1"
                }
              ]
            },
            {
              id: 2,
              label: "一级 2",
              children: [
                {
                  id: 5,
                  label: "二级 2-1"
                },
                {
                  id: 6,
                  label: "二级 2-2"
                }
              ]
            },
            {
              id: 3,
              label: "一级 3",
              children: [
                {
                  id: 7,
                  label: "二级 3-1"
                },
                {
                  id: 8,
                  label: "二级 3-2"
                }
              ]
            }
          ],
          defaultProps: {
            children: "children",
            label: "label"
          }
        }
      },
      methods: {
        selectChange(e) {
          var arrNew = [];
          var dataLength = this.mineStatusValue.length;
          var eleng = e.length;
          for (let i = 0; i < dataLength; i++) {
            for (let j = 0; j < eleng; j++) {
              if (e[j] === this.mineStatusValue[i].label) {
                arrNew.push(this.mineStatusValue[i])
              }
            }
          }
          this.$refs.tree.setCheckedNodes(arrNew);//设置勾选的值
        },
        handleCheckChange() {
          let res = this.$refs.tree.getCheckedNodes(true, true); //这里两个true,1. 是否只是叶子节点 2. 是否包含半选节点(就是使得选择的时候不包含父节点)
          let arrLabel = [];
          let arr = [];
          console.log(res)
          res.forEach(item => {
            arrLabel.push(item.label);
            arr.push(item);
          });
          this.mineStatusValue = arr;
          this.mineStatus = arrLabel;
          console.log('arr:' + JSON.stringify(arr))
          console.log('arrLabel:' + arrLabel)
        }
      }
    })
  </script>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值