【uniapp】实现全选和反选功能

效果图

 

以下是代码

<template>
  <view class="content">
    <view class="box">
      <checkbox-group @change="checkboxChange">
        <view v-for="(item, index) in good" :key="item.id">
          <checkbox :value="String(item.id)" :checked="item.ischecked" />
          <text>{{ item.name }}</text>
        </view>
      </checkbox-group>
    </view>

    <view class="footer">
      <text>全选/反选</text>
      <checkbox-group @change="toggleAll">
        <checkbox :checked="allChecked">全选</checkbox>
      </checkbox-group>
    </view>
  </view>
</template>

<script setup>
import { ref, reactive, onMounted } from 'vue';

const allChecked = ref(false); //控制全选按钮
const good = ref([
  { name: '商品1', id: 1 },
  { name: '商品2', id: 2 },
  { name: '商品3', id: 4 }
  // ...更多商品
]);

// 假如后端不反回状态,这时候我们就需要自己添加这个状态来控制小选
onMounted(() => {
  good.value = good.value.map((item) => ({
    ...item,
    ischecked: false
  }));
});

// 单个复选框改变时触发
function checkboxChange(e) {
  console.log(e.detail.value); //打印的就是选中复选框绑定的value值['1', '2', '4']
  const values = e.detail.value; // 选中项的value值数组
  good.value.forEach((item) => {
    item.ischecked = values.includes(item.id);
    console.log(item.ischecked);
  });
  // 检查是否所有复选框都被选中
  allChecked.value = values.length === good.value.length;
}

// 全选/反选
function toggleAll(e) {
  allChecked.value = !allChecked.value; //选中的时候allChecked的值可以来回切换
  good.value.forEach((item) => {
    // 点击全选遍历数组把全选的值给小选,这样就能实现全选按钮
    item.ischecked = allChecked.value;
  });
}
</script>

<style>
.box {
  display: flex;
  flex-direction: column;
  padding-left: 50px;
}

.footer {
  margin-top: 20px;
  text-align: right;
}
</style>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值