关于在Vue中监听复选框按钮点击实现其他复选框的全选和反选功能

关于在Vue中监听复选框按钮点击实现其他复选框的全选和反选功能

最近找到了一个实习工作,在项目中遇到了这个问题,看了elementui官方文档和百度了一些资料,最后结合起来实现了这个功能,话不多说直接看代码

首先是html,重要看的就是全选el-checkbox的监听事件还有v-model绑定的一个值和被选按钮的v-model值

          <div class="monitoring_checkall">
            <el-checkbox border 
                         class="checkall"
                         v-model="allCheck"
                         @change="changeAllChecked(allCheck)">全选
            </el-checkbox>
          </div>
          <div class="group_box">
            <div class="node_group" 
                 v-for="(item, index) in nodeStyle" 
                 :key="index" >
              <div :style="item" class="node_group_checked">
              </div>
              <el-checkbox label="item" 
                           border 
                           class="node"
                           :key="index"
                           v-model="item.isCheck">{{item.name}}
              </el-checkbox>
            </div>
          </div>

然后是页面的一些数据,样式不用在意

  data() {
    return {
      allCheck: false,
      nodeStyle: [
        { name: '节点1', border: 4 + 'px solid #00F7FE', isCheck: false },
        { name: '节点2', border: 4 + 'px solid #F8D03D', isCheck: false },
        { name: '节点3', border: 4 + 'px solid #56FF7A', isCheck: false },
        { name: '节点4', border: 4 + 'px solid #ED42ED', isCheck: false },
        { name: '节点5', border: 4 + 'px solid #9F10FA', isCheck: false },
        { name: '节点6', border: 4 + 'px solid #006CFE', isCheck: false },
        { name: '节点7', border: 4 + 'px solid #FE7200', isCheck: false },
        { name: '节点8', border: 4 + 'px solid #5C10E9', isCheck: false },
        { name: '节点9', border: 4 + 'px solid #29D78B', isCheck: false },
        { name: '节点10', border: 4 + 'px solid #B900FE', isCheck: false },
        { name: '节点11', border: 4 + 'px solid #00A7FE', isCheck: false },
      ],
    }
  }

然后是methods里面绑定的方法,forEach遍历实现全选和反选的功能

    changeAllChecked(data) {
      console.log(data)
        if (!data) {
        this.nodeStyle.forEach(function (item) {
          item.isCheck = false;
        });
      } else {
        this.nodeStyle.forEach(function (item) {
          item.isCheck = true;
        });
      }
    },

最后也很重要,watch监听判断全选按钮的选择状态

  watch: {
    nodeStyle: {
        handler(value) {
            var count = 0;
            for (var i=0; i<value.length; i++){
                if (value[i].isCheck == true){
                    count ++;
                }
            }
            if (count == value.length){
                this.allCheck = true;
            } else {
                this.allCheck = false;
            }
        },
        deep: true
    },
  },

最后的话就说一下吧,自己解决这个问题也是想了很久,看了官方文档的案列,也百度了很久最后终于能够解决这个问题,也算是记录一下了,希望能得到各位大佬的支持!!谢谢!!

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3实现复选框全选反选功能可以通过以下步骤实现: 1. 在data定义一个allChecked变量,用于表示是否全选。 2. 在data定义一个testList数组,用于存储需要进行全选反选的数据。 3. 在created钩子函数,对testList数组的每个元素添加一个isChecked属性,用于表示该元素是否被选。 4. 在watch监听testList数组的变化,当testList数组的元素被选或取消选时,判断是否全部选,如果全部选,则将allChecked变量设置为true,否则设置为false。 5. 在methods定义handleAllChecked方法,用于实现全选反选功能。该方法接收一个参数v,用于表示是否全选。当v为true时,将testList数组的每个元素的isChecked属性设置为true,否则设置为false。 6. 在methods定义handleChecked方法,用于处理单个复选框的选状态。该方法接收两个参数,item表示当前选的元素,e表示当前元素的选状态。当e为true时,将item的isChecked属性设置为true,否则设置为false。 下面是示例代码: ```javascript <template> <div> <input type="checkbox" v-model="allChecked" @change="handleAllChecked($event.target.checked)">全选 <div v-for="(item, index) in testList" :key="index"> <input type="checkbox" v-model="item.isChecked" @change="handleChecked(item, $event.target.checked)"> {{ item.id }} </div> </div> </template> <script> export default { data () { return { allChecked: false, testList: [ { id: 1, isChecked: false }, { id: 2, isChecked: false }, { id: 3, isChecked: false }, { id: 4, isChecked: false }, { id: 5, isChecked: false } ] } }, watch: { testList: { handler (val) { let i = 0 val.forEach(item => { if (item.isChecked === true) { i++ } }) if (i === val.length) { this.allChecked = true } else { this.allChecked = false } }, deep: true } }, methods: { handleAllChecked (v) { this.testList.forEach(item => { item.isChecked = v }) }, handleChecked (item, e) { item.isChecked = e } } } </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值