Skip to content

Checkbox 复选框

介绍

在一组备选项中进行多选。

引入

ts
import { IBestCheckbox, IBestCheckboxGroup } from "@ibestservices/ibest-ui";

代码演示

TIP

  • 通过 IBestCheckboxGrouponChange 事件获取当前选中的 IBestCheckboxname
  • 通过 group 属性将 IBestCheckboxGroupIBestCheckbox 组件关联起来, group 的值具有全局唯一性或已入栈的页面唯一性,与 IBestRadio 组件的 group 值不冲突。
  • 通过 IBestCheckbox 组件的 value 来设置默认选中。
  • IBestCheckbox 组件的 name 值在同一 group 中需具备唯一性

基础用法

基础用法

TIP

  • 通过 IBestCheckboxonChange 事件来响应选中状态的变化。
  • 通过 IBestCheckbox 组件的 value 来设置默认选中。
点我查看代码
ts
IBestCheckbox({
  value: true,
  label: "复选框",
  name: "checkbox1",
  onChange: value => {
    console.log("checkbox1", value);
  },
});

禁用状态

禁用状态

TIP

通过设置 disabled 属性可以禁用复选框。

点我查看代码
ts
IBestCheckbox({
  value: true,
  disabled: true,
  label: "复选框",
  name: "checkbox2",
});
IBestCheckbox({
  value: false,
  disabled: true,
  label: "复选框",
  name: "checkbox3",
});

自定义形状

自定义形状

TIP

shape 属性设置为 square,复选框的形状会变成方形。

点我查看代码
ts
IBestCheckbox({
  value: true,
  shape: "square",
  label: "自定义形状a",
  name: "checkbox4",
});

IBestCheckbox({
  value: false,
  shape: "square",
  label: "自定义形状b",
  name: "checkbox5",
});

自定义颜色

自定义颜色

TIP

通过 checkedColor 属性设置选中状态的图标颜色。

点我查看代码
ts
IBestCheckbox({
  value: true,
  checkedColor: "#ee0a24",
  shape: "square",
  label: "自定义颜色a",
  name: "checkbox5",
});
IBestCheckbox({
  value: true,
  checkedColor: "#ee0a24",
  label: "自定义颜色b",
  name: "checkbox6",
});

自定义大小

自定义大小

TIP

通过 iconSize 属性可以自定义图标与文字的大小。

点我查看代码
ts
IBestCheckbox({
  value: true,
  iconSize: 60,
  label: "自定义大小",
  name: "checkbox7",
});

左侧文本

左侧文本

TIP

labelPosition 属性设置为 'left',可以将文本位置调整到复选框左侧。

点我查看代码
ts
IBestCheckbox({
  value: true,
  labelPosition: "left",
  label: "左侧文本",
  name: "checkbox8",
});

禁用文本点击

禁用文本点击

TIP

设置 labelDisabled 属性后,点击图标以外的内容不会触发复选框切换。

点我查看代码
ts
IBestCheckbox({
  value: true,
  label: "复选框",
  labelDisabled: true,
  name: "checkbox9",
});

复选框组

复选框组

TIP

  • 通过 IBestCheckboxGrouponChange 事件获取当前选中的 checkboxname
  • 通过 IBestCheckbox 组件的 value 来设置默认选中。
点我查看代码
ts
IBestCheckboxGroup({
  group: "group1",
  onChange: checkboxNames => {
    console.log(JSON.stringify(checkboxNames));
  },
});
IBestCheckbox({
  value: true,
  group: "group1",
  label: "复选框a",
  name: "checkbox10",
});

IBestCheckbox({
  value: true,
  group: "group1",
  label: "复选框b",
  name: "checkbox11",
});

水平排列

水平排列

TIP

给组件包裹一层 Row 组件,复选框组会变成水平排列。

点我查看代码
ts
IBestCheckboxGroup({
  group: "group3"
});

Row(){
  IBestCheckbox({
    value: true,
    group: "group3",
    label: "复选框a",
    name: "checkbox10",
  });

  IBestCheckbox({
    value: true,
    group: "group3",
    label: "复选框b",
    name: "checkbox11",
  });
}

限制最大可选数

限制最大可选数

TIP

通过 max 属性可以限制复选框组的最大可选数。

点我查看代码
ts
IBestCheckboxGroup({
  group: "group2",
  max: 2
});

Row(){
  IBestCheckbox({
    value: true,
    group: "group2",
    label: "复选框a",
    name: "checkbox10",
  });

  IBestCheckbox({
    value: true,
    group: "group2",
    label: "复选框b",
    name: "checkbox11",
  });

  IBestCheckbox({
    value: true,
    group: "group2",
    label: "复选框c",
    name: "checkbox11",
  });
}

全选与反选

全选与反选

TIP

通过 CheckboxGroup 实例上的 toggleAll 方法可以实现全选与反选。

点我查看代码
ts
import { IBestCheckboxGroup, IBestCheckbox, CheckboxGroupContext } from '@ibestservices/ibset-ui'

@Entry
@Component
struct CheckboxPage {
  /**
   * 全选反选的chekboxGroup的this指向
   */
  checkboxGroupContext: CheckboxGroupContext | null = null;

  build(){
    Column(){
      IBestCheckboxGroup({
        group: 'group4',
        // 代表子组件和当前组件加载完成
        onReady: (checkboxGroupContext) => {
          this.checkboxGroupContext = checkboxGroupContext
        }
      })

      IBestCheckbox({
        group: 'group4',
        label: '复选框a',
        name: 'checkbox1'
      })

      IBestCheckbox({
        group: 'group4',
        label: '复选框b',
        name: 'checkbox2',
      })

      IBestCheckbox({
        group: 'group4',
        label: '复选框c',
        name: 'checkbox3',
      })

      Row(){
        IBestButton({
          text: '全选',
          type: 'primary',
          onClickBtn: () => {
            this.checkboxGroupContext.toggleAll(true)
          }
        })

        IBestButton({
          text: '反选',
          type: 'warning',
          onClickBtn: () => {
            this.checkboxGroupContext.toggleAll()
          }
        })

        IBestButton({
          text: '取消选中',
          onClickBtn: () => {
            this.checkboxGroupContext.toggleAll(false)
          }
        })
      }
    }
  }
}

不确定状态

不确定状态

TIP

通过 indeterminate 设置复选框是否为不确定状态。

点我查看代码
ts
import { IBestCheckboxGroup, IBestCheckbox, CheckboxGroupContext } from '@ibestservices/ibset-ui'

@Entry
@Component
struct CheckboxPage {
  /**
   * 不确定状态
   */
  @State isIndeterminate: boolean = true;
  /**
   * 不确定状态数据是否选中了全部
   */
  @State isIndeterminateCheckAll: boolean = false;
  /**
   * 全选反选的chekboxGroup的this指向
   */
  checkboxGroupIndeterminateContext: CheckboxGroupContext | null = null;

  build(){
    // ...

    Column() {
      IBestCheckbox({
        value: this.isIndeterminateCheckAll,
        label: '全选',
        indeterminate: this.isIndeterminate,
        name: 'checkbox10',
        onChange: (checked) => {
          this.checkboxGroupIndeterminateContext?.toggleAll(checked)
        }
      })
    }

    IBestCheckboxGroup({
      group: 'group5',
      onChange: (checkedNames) => {
        const length = checkedNames.length
        this.isIndeterminate = length < 2 && length > 0;
        this.isIndeterminateCheckAll = length === 2
      },
      onReady: (checkboxGroupContext) => {
        this.checkboxGroupIndeterminateContext = checkboxGroupContext
      }
    })

    IBestCheckbox({
      group: 'group5',
      label: '复选框a',
      name: 'checkbox10'
    })

    IBestCheckbox({
      value: true,
      group: 'group5',
      label: '复选框b',
      name: 'checkbox11',
    })

    // ...
  }
}

搭配单元格组件使用

搭配单元格组件使用

TIP

搭配单元格组件使用时,需要再引入 IBestCellIBestCellGroup 组件。

点我查看代码
ts
import { IBestCheckboxGroup, IBestCheckbox, CheckboxGroupContext } from '@ibestservices/ibset-ui'

@Entry
@Component
struct CheckboxPage {
  /**
   * 搭配单元格组件选中的name
   */
  @State cellCheckedNames: string[] = [];

  /**
   * 最大可选数量
   */
  cellCheckedMaxNum = 2

  @Builder CellCheckbox(name, group){
    IBestCheckbox({
      name,
      group,
      value: this.cellCheckedNames.includes(name)
    })
  }

  handleClickCell(name){
    const index = this.cellCheckedNames.indexOf(name)
    if(index > -1){
      this.cellCheckedNames.splice(index ,1)
    }else{
      (this.cellCheckedMaxNum > this.cellCheckedNames.length) && this.cellCheckedNames.push(name)
    }
  }

  build(){
    Column() {
      IBestCheckboxGroup({
        group: 'group17',
        max: this.cellCheckedMaxNum,
        onChange: (names)=>{
          console.log(JSON.stringify(names))
        }
      })

      IBestCell({
        clickable: true,
        title: '复选框1',
        rightIconBuilder: () => this.CellCheckbox('checkbox1-cell', 'group17'),
        onClickCell: () => this.handleClickCell('checkbox1-cell')
      })

      IBestCell({
        clickable: true,
        title: '复选框2',
        rightIconBuilder: () => this.CellCheckbox('checkbox2-cell', 'group17'),
        onClickCell: () => this.handleClickCell('checkbox2-cell')
      })

      IBestCell({
        clickable: true,
        title: '复选框3',
        hasBorder: false,
        rightIconBuilder: () => this.CellCheckbox('checkbox3-cell', 'group17'),
        onClickCell: () => this.handleClickCell('checkbox3-cell')
      })
    }
  }
}

API

Checkbox @Props

参数说明类型默认值
name标识符,通常为一个唯一的字符串或数字,同一 groupname 不可重复string | number
group标识符,通常为一个唯一的字符串,需具备全局唯一性或已入栈的页面唯一性string
label显示的文本string
value默认是否选中 非双向绑定,如果要获取最新的值请从 onChange 回调中获取string
iconSize图标大小number | string18
shape形状,可选值为 square dotstringround
disabled是否为禁用状态booleanfalse
labelDisabled是否禁用文本内容点击booleanfalse
labelPosition文本位置,可选值为 leftstringright
checkedColor选中状态颜色ResourceColor
indeterminate是否为不确定状态booleanfalse
labelFontSize 1.18.0文本字体大小number | string16

CheckboxGroup @Props

参数说明类型默认值
group标识符,通常为一个唯一的字符串,需具备全局唯一性或已入栈的页面唯一性string
max最大可选数,0 为无限制number

Checkbox Events

事件名说明事件类型
onChange选中状态改变的回调事件(checked: boolean) => void

CheckboxGroup Events

事件名说明事件类型
onChange选中状态改变的回调事件,回调参数是选中的 checkbox 组件的 name(checkboxNames: string[]) => void
onReady初始化完成的回调(checkboxGroupContext: CheckboxGroupContext) => void

Checkbox @BuilderParam 插槽

插槽名说明类型
defaultBuilderlabel 的插槽,优先级大于 label 属性(data: { checked: boolean, disabled: boolean }) => any
iconBuilder自定义图标插槽,需要自己调整选中与未选中展示的 UI 内容(data: { checked: boolean, disabled: boolean }) => any