Skip to content

Switch 开关

介绍

用于在打开和关闭状态之间进行切换。

引入

ts
import { IBestSwitch } from "@ibestservices/ibest-ui";

代码演示

基础用法

基础用法

TIP

通过 IBestSwitch 组件的 value 来设置开关的状态,通过 onChange 监听状态变化。

点我查看代码
ts
@Entry
@Component
struct DemoPage {
  @State value: boolean = false
  build() {
    IBestSwitch({
      value: $value
    })
  }
}

禁用状态

禁用状态

TIP

通过 disabled 属性来禁用开关,禁用状态下开关不可点击。

点我查看代码
ts
@Entry
@Component
struct DemoPage {
  @State value1: boolean = true
	@State value2: boolean = false
  build() {
    Column({space: 14}){
      IBestSwitch({
        value: $value1,
        disabled: true
      })
      IBestSwitch({
        value: $value2,
        disabled: true
      })
    }
  }
}

加载状态

加载状态

TIP

通过 loading 属性来禁用开关,加载状态下开关不可点击。

点我查看代码
ts
@Entry
@Component
struct DemoPage {
  @State value1: boolean = true
	@State value2: boolean = false
  build() {
    Column({space: 14}){
      IBestSwitch({
        value: $value1,
        loading: true
      })
      IBestSwitch({
        value: $value2,
        loading: true,
        activeColor: '#07c160'
      })
    }
  }
}

自定义大小

自定义大小

TIP

通过 switchSize 属性自定义开关的大小。

点我查看代码
ts
@Entry
@Component
struct DemoPage {
  @State value: boolean = true
  build() {
    IBestSwitch({
      value: $value,
      switchSize: 20
    })
  }
}

自定义按钮

自定义按钮

TIP

通过 nodeBuilder 插槽自定义按钮的内容。

点我查看代码
ts
@Entry
@Component
struct DemoPage {
  @State value: boolean = true
  @State arrowDirection: 'left' | 'right' = 'left'
  @Builder Arrow(){
    Row(){
      Image($r('app.media.arrow'))
        .width(15)
        .fillColor(this.arrowDirection === 'left' ? '#db3131' : '#e2e3e7')
        .rotate({
          angle: this.arrowDirection === 'left' ? 0 : -180
        }).animation({
          duration: 200
        })
    }
  }
  build(){
    IBestSwitch({
      value: $value,
      activeColor: '#db3131',
      nodeBuilder: () => this.Arrow(),
      onChange: value => {
        this.arrowDirection = value ? 'left' : 'right'
      }
    })
  }
}

异步控制

异步控制

TIP

当需要异步控制开关状态时,可以在 onBeforeChange 事件的回调函数中返回一个 Promise 。如果 Promise 状态为 resolve ,则按钮状态变化将继续进行;如果状态为 reject ,则将阻止按钮状态的变化。

点我查看代码
ts
@Entry
@Component
struct DemoPage {
  @State value: boolean = true
  build() {
    IBestSwitch({
      value: $value,
      onBeforeChange: () => {
        return new Promise((resolve, reject) => {
          IBestDialogUtil.open({
            title: "提示",
            message: "确定更改状态?",
            showCancelButton: true,
            onConfirm: () => {
              resolve()
            },
            onCancel: () => {
              reject()
            }
          })
        })
      }
    })
  }
}

API

@Props

参数说明类型默认值
value默认是否选中, 支持双向绑定booleanfalse
disabled是否禁用按钮booleanfalse
loading是否显示为加载状态booleanfalse
switchSize大小尺寸number | string26
activeColor打开时的背景色ResourceColor#1989fa
inactiveColor关闭时的背景色ResourceColorrgba(120, 120, 128, 0.2)
loadingActiveColor打开时的 loading 颜色,默认跟随 activeColorResourceColor
loadingInactiveColor关闭时的 loading 颜色,默认跟随 activeColorResourceColor

Events

事件名说明事件类型
onChange开关状态改变的回调事件value: boolean
onBeforeChange开关状态改变前的回调事件,value 为将要改变的状态, 接收一个 Promise 对象,如果 Promise 状态为 resolve ,则按钮状态变化将继续进行;如果状态为 reject ,则将阻止按钮状态的变化。(value: boolean) => Promise<boolean>
onClickSwitch点击开关的回调事event: ClickEvent

插槽

插槽名说明类型
nodeBuilder自定义按钮的内容CustomBuilder