element-ui +vue 下实现带全选功能的多选按钮


需求:业务需要实现带全选功能的多选按钮 element ui 中只提供了checkbox-box 而没有提供 checkbox-button 样式上没有满足。

实现原理: element 中checkbox-button 的多选功能实际上是数组形式存放选项 根据他的change事件来操作数组进行实现。

<div>
  <el-checkbox-group v-model="store" @change="handleCheck">
    <el-checkbox-button v-for="(item) in this.store_list" :label="item.name" :key="item.name"></el-checkbox-button>
  </el-checkbox-group>
</div>
  data() {
  return{
    // 已选中仓库
    store:['全选'],
// 仓库列表
    store_list:[{
      store:'全选',
      name:'全选'
    },{
      store:'京北',
      name:'京北'
    },{
      store:'京南',
      name:'京南'
    },{
      store:'京西',
      name:'京西'
    },{
      store:'京东',
      name:'京东'
    }],
  }
  },
    handleCheck(val){
      // 检查数组中是否有全选
      let fl = this.store.includes('全选')

      if(fl){
        if(this.store.length ===1 ){
          // 如果当前全选  且只有全选 则不操作
          this.store = ['全选']
        }else if(this.store_list.length !== this.store.length) {
          let ind = this.store.indexOf('全选')
          if(ind ===this.store.length-1){
            // 如果有全选且 全选在数组的最后,则说明当前点击的是全选按钮
            this.store = ['全选']
          }else {
            // 有全选 且有多个值则删除全选
            let i = this.store.indexOf('全选')
            this.store.splice(i,1)
          }
        }else {
          // 点击之后数组满了则只剩全选
          this.store = ['全选']
        }
      }else if(this.store_list.length-1 === this.store.length) {
        // 如果没有全选并且数组数量为总数减一 则全选
        this.store = ['全选']
      }
      console.log(this.store)
    },

具体逻辑就不说了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现element UI级联菜单的全选/取消全选功能,可以通过以下步骤实现: 1. 在级联菜单的第一个级别中添加一个全选按钮,用于全选/取消全选所有选项。 2. 在每个级别的选项中添加一个复选框,用于选择/取消选择当前选项。 3. 在全选按钮的点击事件中,遍历所有选项,将其选中状态设置为全选按钮的选中状态。 4. 在每个选项的点击事件中,更新选中状态,并根据当前级别的其他选项状态更新全选按钮的状态。 下面是一个示例代码: ```html <template> <el-cascader v-model="selectedOptions" :options="options" :props="props" @change="handleChange" > <template #prefix> <el-checkbox v-model="allChecked" @change="handleAllCheckedChange" > 全选 </el-checkbox> </template> </el-cascader> </template> <script> export default { data() { return { options: [ { value: 'option1', label: '选项1', children: [ { value: 'option1-1', label: '选项1-1', }, { value: 'option1-2', label: '选项1-2', }, ], }, { value: 'option2', label: '选项2', children: [ { value: 'option2-1', label: '选项2-1', }, { value: 'option2-2', label: '选项2-2', }, ], }, ], props: { value: 'value', label: 'label', children: 'children', }, selectedOptions: [], allChecked: false, }; }, methods: { handleChange(value) { this.selectedOptions = value; }, handleAllCheckedChange(checked) { this.allChecked = checked; this.options.forEach((option) => { option.checked = checked; if (option.children) { this.checkChildren(option.children, checked); } }); }, handleOptionCheckedChange(option) { option.checked = !option.checked; this.checkParent(option); if (option.children) { this.checkChildren(option.children, option.checked); } }, checkChildren(children, checked) { children.forEach((child) => { child.checked = checked; if (child.children) { this.checkChildren(child.children, checked); } }); }, checkParent(option) { let parent = option.parent; while (parent) { let allChecked = true; parent.children.forEach((child) => { if (!child.checked) { allChecked = false; } }); parent.checked = allChecked; parent = parent.parent; } }, }, created() { this.options.forEach((option) => { option.checked = false; if (option.children) { this.setParent(option.children, option); } }); }, }; </script> ``` 在这个示例中,我们在级联菜单的第一个级别中添加了一个全选复选框,并使用`@change`事件处理函数`handleAllCheckedChange`来处理全选/取消全选事件。在每个选项中添加了一个复选框,并使用`@change`事件处理函数`handleOptionCheckedChange`来处理选项选择/取消选择事件。在全选/取消全选事件中,我们遍历所有选项,并将其选中状态设置为全选按钮的选中状态。在选项选择/取消选择事件中,我们更新选中状态,并根据当前级别的其他选项状态更新全选按钮的状态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值