vue2+ant-design-vue复选框外部控制全选和取消单个选中

475 阅读1分钟

先看图吧。这个和购物车的效果大同小异。看看有没有时间,写个购物车的demo。实现的最终效果: f4f104c41a2905312f3c8c42cd642ec.png 开关为 true的时候,默认是全选的

9670019a23a9faff2666103a51b329f.png 也可以单个控制选中状态:

30c608c464691b1ee05b94adc91c6da.png 直接上代码:

// 开关
<a-switch :checked="isAllChecked" @change="onCheckAllChange"/>

// 这里面用了ant-design-vue里面的 a-list
```
<a-list :data-source="imgList" :grid="{ gutter: 16, xs: 1, sm: 2, md: 4, lg: 4, xl: 6, xxl: 3 }">
      <template v-for="(imgItem) in imgList">
          <a-list-item class="imgList">
              <a-row>
                    <a-col :span="24" class="imgContent">
                       <a-checkbox :class="toggleClass" :checked="isSelected(imgItem.id)"  @change="onCheckboxChange(imgItem.id)" style="float: right;margin-right: 10px"></a-checkbox>
                    </a-col>
              </a-row>
           </a-list-item>
     </template>
</a-list>
```

```js
data(){
    return {
        imgList: [] // 数据列表
        isAllChecked: false, // 开关默认是关着的
        selectedIds:[], // 后台需要的数据,这里先默认后台只需要id,下面会有处理,可以返回整个数组对象
        selectedItems:[] // 这个就是给后台所有的数据,如果有筛选,去筛选一下就可以
    }
},
```
computed: {
    toggleClass() {
        return !this.isAllChecked ? 'hidden' : '' // 根据开关的true 和false,下面复选框是显示还是隐藏
    },
    selectedItems() {
        // 看后台都需要什么数据,将所有选中的数据都返回给后台
        return this.imgList.filter(item => this.selectedIds.includes(item.id));
    }
},
methods: {
    ```
onCheckAllChange(newValue) {
    this.isAllChecked = newValue; // 更新checked的值,否则会导致,开关开一下里面就关上
    if (newValue) {
        this.selectedIds = this.imgList.map(item => item.id)
        console.log(this.selectedIds)  // 所有选中的id
    } else {
        this.selectedIds = []
    }
},
isSelected(id) {
    // 判断某个复选框是否选中
    return this.selectedIds.includes(id);
},
onCheckboxChange(id) {
    if (this.isSelected(id)) {
        this.selectedIds = this.selectedIds.filter(item => item !== id);
    } else {
        this.selectedIds.push(id);
    }
},
```
}
// 因为我的需求,是要求在提交的时候,才提交给后台数据,selectedItems 可以直接用,看你给后台传什么数据,```
console.log('获取所有选中的数据',this.selectedItems)
// 现在直接打印出来就是 imgList 里面所有的属性都有的一个 数组对象了
可以根据自己的需要去给后台
```
```
```
这个需求还是很好理解的,就是上面的开关控制下面的复选框,当开关 为 true 的时候,下面的复选框显示并且默认全选,也可以单独操作每个复选框。