vue2中,下拉框多选和全选的实现

在这里插入图片描述
如图所示点击全选即可完成下拉框中全部子项的全部的选中,同时取消全选即可全部取消选择。

代码布局

  <div class="chos-box2">
              <span>屏蔽策略名称</span><el-select
                v-model="cluster_nameArr"
                filterable
                size="small"
                multiple
                placeholder="多选(可全选)"
                collapse-tags="collapseTags"
                clearable
                @change="searchDataHA"
              >
                <el-option
                  label="全选"
                  value="全选"
                  @click.native="selectAllHA"
                  v-if="options4.length"
                ></el-option>
                <el-option
                  v-for="item in options4"
                  :key="item"
                  :label="item"
                  :value="item"
                >
                </el-option>
              </el-select>
            </div>

相关的el参数可以查询,

在methods: 中添加功能函数

method:{
 searchDataHA(val) {
      if (!val.includes("全选") && val.length === this.options4.length) {
        this.cluster_nameArr.unshift("全选");
      } else if (
        val.includes("全选") &&
        val.length - 1 < this.options4.length
      ) {
        this.cluster_nameArr = this.cluster_nameArr.filter((item) => {
          return item !== "全选";
        });
      }


      this.page = 1;
      this.getConfigData();//用来请求数据的函数
    },
    }

较为完整的一个整体代码:

<template>
<div class="chos-box2">
              <span>屏蔽策略名称</span><el-select
                v-model="cluster_nameArr"
                filterable
                size="small"
                multiple
                placeholder="多选(可全选)"
                collapse-tags="collapseTags"
                clearable
                @change="searchDataHA"
              >
                <el-option
                  label="全选"
                  value="全选"
                  @click.native="selectAllHA"
                  v-if="options4.length"
                ></el-option>
                <el-option
                  v-for="item in options4"
                  :key="item"
                  :label="item"
                  :value="item"
                >
                </el-option>
              </el-select>
            </div>
            </template>
            <script>
 export default {
  data() {
  // 已选中选项
      mulSelecteds: {
        type: Array,
        default() {
          return [];
        },
      },
      collapseTags: {
        type: Boolean,
        default: true,
      },}
      method:{
 searchDataHA(val) {
      if (!val.includes("全选") && val.length === this.options4.length) {
        this.cluster_nameArr.unshift("全选");
      } else if (
        val.includes("全选") &&
        val.length - 1 < this.options4.length
      ) {
        this.cluster_nameArr = this.cluster_nameArr.filter((item) => {
          return item !== "全选";
        });
      }
      this.page = 1;
      this.getConfigData();//用来请求数据的函数
    },
     selectAllHA() {
      if (this.cluster_nameArr.length < this.options4.length) {
        this.cluster_nameArr = [];
        this.options4.map((item) => {
          this.cluster_nameArr.push(item);
        });
        this.cluster_nameArr.unshift("全选");
      } else {
        // 取消全选
        this.cluster_nameArr = [];
      }
      console.log("全选", this.checked, this.options2, this.selectedArr);
    },},
    

     watch: {//用来监听变量
    mulSelecteds: {
      handler(newVal, oldVal) {
        this.selectedArr = newVal;
        if (
          !this.selectedArr.includes("全选") &&
          this.selectedArr.length &&
          this.selectedArr.length === this.options2.length
        ) {
          this.selectedArr.unshift("全选");
        }
      },

      immediate: true,
    },
  },
      }

</script>
<style lang="scss" scoped>
  .chos-box2 {
            margin-right: 25px;
            span {
              display: inline-block;
              width: 115px;
            }
          }
</style>

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值