解决 Vant van-checkbox 半选状态问题:实现多状态选择功能

974 阅读1分钟

在使用 Vant 组件库时,van-checkbox 组件提供了简单的多选功能,但是其默认只支持“全选”和“未选”状态。我们经常需要一个“半选”状态来表示某些子项被选中,但并不是全部选中。

image.png

1. 需求背景

我们通常会遇到以下两种常见的需求:

  • 全选:当所有子项都选中时,父项需要自动变为全选状态。
  • 半选:当部分子项被选中时,父项显示为半选状态(通常是一个减号标志)。
  • 未选:当没有子项被选中时,父项显示为未选状态。

在这些场景下,我们希望能够利用 Vant 提供的 van-checkbox 来同时实现三种状态:全选、半选、未选。

2. 解决方案

Vant 的 van-checkbox 组件本身并不直接支持半选状态(即“部分选中”状态),但是我们可以通过结合 v-if 和插槽 #icon 来定制一个自定义的半选标识。通过判断是否是半选状态,我们可以在勾选框内显示减号图标,来代表半选状态。

3. 代码实现

<template>
  <van-checkbox 
    style="margin-right: 10px" 
    shape="square" 
    :value="checkAllStatus"  
  >
    <!-- 自定义半选状态的图标 -->
    <template #icon v-if="indeterminateStatus">
      <div style="height:100%;width:100%;background:#1989fa;">
        <van-icon style="border:none;" color="#fff" name="minus" />
      </div>
    </template>
  </van-checkbox>
</template>

<script>
export default {
  data() {
    return {
      checkAllStatus: false,  // 全选框的选中状态
      indeterminateStatus: false  // 半选框的状态
    };
  },
}
</script>