vue实现多选、全选

vue实现多选、全选功能,不依赖任何第三方组件、插件,复制粘贴开箱即用,简简单单,干净卫生

<template>
  <div id="app">
    <div class="content">
        <div class="selectAll" >
          <div :class="['select',SelectId.length==CheckList.length?'selectActv':'']" 
          @click="allFun()"></div>
          <span>全选/反选</span>
      </div>
      <div class="CheckBox">
        <div class="CheckItem" v-for="(item,index) in CheckList" :key="index">
          <div :class="['select',SelectId.includes(item.id)?'selectActv':'']" 
          @click="selectFun(item.id)"></div>
          <span>{{item.text}}</span>
        </div>
      </div>
      <div>已选项:</div>
      <p v-for="(item,index) in ChooseList" :key="index">
         {{item}}
      </p>
    </div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        SelectId: [], // 已选列表
        CheckList: [
          {id: 1,text: "西瓜"},
          {id: 2,text: "葡萄"},
          {id: 3,text: "香蕉"},
          {id: 4,text: "榴莲"},
          {id: 5,text: "柚子"},
          {id: 6,text: "枇杷"},
          {id: 7,text: "车厘子"},
        ],
      };
    },
    computed: {
      // 被选中项的集合
      ChooseList() {
        return this.CheckList.filter((item) => {
          if (this.SelectId.includes(item.id)) {
            return item
          }
        })
      },
    },
    methods: {
      selectFun(id) {
        if (!this.SelectId.includes(id)) {
          this.SelectId.push(id) // 判断已选列表中是否存在该id,不是则追加进去
        } else {
          let index = this.SelectId.indexOf(id) // 求出当前id的所在位置
          this.SelectId.splice(index, 1) // 否则则删除
        }
      },
      // 全选、反选
      allFun() {
        if (this.SelectId.length == this.CheckList.length) {
          this.SelectId = [] // 判断是否已全部选中,是则清空已选列表
        } else {
          this.CheckList.forEach((item) => {
            if (!this.SelectId.includes(item.id)) {
              this.SelectId.push(item.id) // 否则将未选中的全部加入已选列表中
            }
          })
        }
      },
    }
  };
</script>

  * {
    color: #333;
    box-sizing: border-box;
    user-select: none;
  }
  .CheckBox {
    width: 100%;
    display: flex;
    flex-wrap: wrap;
    margin: 50px auto;
    margin-bottom: 20px;
  }
  .CheckItem {
    display: flex;
    margin: 0px 30px 30px 0px;
    align-items: center;
  }
  .select {
    width: 20px;
    height: 20px;
    border-radius: 2px;
    border: 1px solid #ccc;
    display: flex;
    justify-content: center;
    cursor: pointer;
    margin-right: 10px;
    align-items: center;
  }
  .selectActv::before {
    display: block;
    content: "";
    width: 5px;
    height: 12px;
    border-bottom: 2px solid #aaa;
    border-right: 2px solid #aaa;
    transform: rotate(45deg);
  }
  .selectAll{
    display: flex;
  }
  .content {
    width: 500px;
    margin: 120px auto;
  }

  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Vue Select的多选全选功能,你可以使用以下步骤: 1. 在Vue组件中,使用`v-model`指令将选择的值绑定到一个数据属性上,例如`selectedOptions`。 2. 添加一个全选的复选框,用于选择或取消选择所有选项。你可以使用一个单独的数据属性,例如`selectAll`,来保存全选复选框的状态。 3. 在Vue的模板中,为每个选项添加一个复选框,并将其选择状态与对应的选项绑定。使用`v-model`指令将选中状态绑定到一个临时的`isChecked`属性上。 4. 监听全选复选框的变化,当全选复选框的状态改变时,更新每个选项的选择状态。 下面是一个示例代码: ```html <template> <div> <input type="checkbox" v-model="selectAll" @change="selectAllOptions"> <label for="select-all">全选</label> <select multiple v-model="selectedOptions"> <option v-for="option in options" :value="option.value" :key="option.value"> <input type="checkbox" :value="option.value" v-model="option.isChecked"> {{ option.label }} </option> </select> </div> </template> <script> export default { data() { return { options: [ { label: '选项1', value: 'option1', isChecked: false }, { label: '选项2', value: 'option2', isChecked: false }, { label: '选项3', value: 'option3', isChecked: false }, // 添加更多选项... ], selectedOptions: [], selectAll: false, }; }, methods: { selectAllOptions() { this.options.forEach((option) => { option.isChecked = this.selectAll; }); if (this.selectAll) { this.selectedOptions = this.options.map((option) => option.value); } else { this.selectedOptions = []; } }, }, }; </script> ``` 在上面的示例中,我们使用了一个`options`数组来存储所有的选项。每个选项都有一个`isChecked`属性来表示其选择状态。当全选复选框改变时,我们遍历所有选项并更新它们的选择状态。同时,我们根据选择状态更新`selectedOptions`数组,以便在多选框中显示被选择的选项。 希望这能帮助到你实现Vue Select的多选全选功能!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值