跳到主要内容
Switch
开关用于在两个状态之间切换时,比如用在开/关、启用/禁用等场景中,用户可以点击或拖动一个滑块,改变开关的状态。

示例

基础

  • Switch开关有五种状态:开启、关闭、禁用(开启、关闭)、聚焦、只读;移动端没有聚焦状态;
  • 如果您需要开关初始状态为打开,请使用默认开启。
    PCPhonePad
    <page>
    <module title="Base">
    <actions>
    <button bindclick="setDefaultOpen" text="默认开启"></button>
    </actions>
    <form>
    <item node="switch" label="App推送" value="{{defaultValue}}"></item>
    </form>
    </module>
    </page>

    export default XPage({
    data:{
    defaultValue: false
    },
    setDefaultOpen() {
    this.setData({
    defaultValue: true
    })
    }
    });


类型

  • Switch开关有基础、文字、图标三种类型;
  • 使用文字开关类型时,文字应尽量简单清晰,中文少于4个字,英文少于2个单词,文字过长会破坏开关形态,影响识别。
    PCPhonePad
    <page>
    <module title="Type">
    <actions>
    <button bindclick="setBaseType" text="基础"></button>
    <button bindclick="setTextType" text="文字"></button>
    <button bindclick="setIconType" text="图标" disabled></button>
    </actions>
    <form>
    <item node="switch" label="App推送" v-bind="typeProps"></item>
    </form>
    </module>
    </page>

    export default XPage({
    data:{
    typeProps: {}
    },
    setBaseType(){
    this.setData({
    typeProps: {}
    })
    },
    setTextType() {
    this.setData({
    typeProps: {
    activeText: '开',
    inactiveText: '关',
    }
    })
    },
    setIconType(){},
    });


禁用

switch在开启或关闭状态下均有禁用状态,通过disabled参数控制禁用状态。

PCPhonePad
<page>
<module title="Type">
<actions>
<button bindclick="toggleStatus" text="{{disabled ? '启用' : '禁用' }}"></button>
</actions>
<form layout="horizontal">
<item node="switch" label="App推送" disabled="{{disabled}}"></item>
<item node="switch" label="App推送" disabled="{{disabled}}" activeText="on" inactiveText="off"></item>
</form>
</module>
</page>

export default XPage({
data:{
disabled: true
},
toggleStatus() {
this.setData({
disabled: !this.data.disabled
})
},
});


只读

通过添加lock参数,改变switch开关只读状态

PCPhonePad
<page>
<module title="Read-only">
<actions>
<button bindclick="toggleStatus" text="{{locked ? 'Unlock' : 'Lock' }}"></button>
</actions>
<form layout="horizontal" locked="{{locked}}" key="form-{{locked}}">
<item node="switch" label="App推送"></item>
<item node="switch" label="App推送" activeText="on" inactiveText="off"></item>
</form>
</module>
</page>

export default XPage({
data:{
locked: true
},
toggleStatus() {
this.setData({
locked: !this.data.locked
})
},
});


有条件

当使用切换开关需要判断前置条件时,可以通过beforeChange参数来管理输入的检查状态,程序将控制您传递给Switch开关的状态值。

PCPhonePad
<page>
<module>
<form confirm-button="{{false}}" clear-button="{{false}}">
<item node="switch" label="App推送" beforeChange="{{beforeChange}}"></item>
</form>
</module>
</page>

export default XPage({
data:{},
beforeChange(oldValue) {
console.info('oldValue', oldValue);
//返回: true 为不拦截,false 为拦截
return false
}
});


最佳实践

在表单内

开关默认带有标签,以表明此开关作用,开关可设置默认状态为“开”或“关”。

PCPhonePad
<page>
<module title="费用设置">
<form confirm-button="{{false}}" clear-button="{{false}}">
<item node="switch" label="拣货服务费" name="pickingServiceFee"></item>
<item node="switch" label="配送费" name="deliveryFee"></item>
<item node="switch" label="打包费" name="packingFee"></item>
</form>
</module>
</page>

export default XPage({
data:{
defaultValue: false
},
setDefaultOpen() {
this.setData({
defaultValue: true
})
}
});


在表格

PCPhonePad
<page>
<module>
<table type="super" data="{{tableData}}" selectable="{{multiple: true}}" stripe>
<cell label="任务ID" name="taskId">
{{ cellData.rowData.taskId }}
</cell>
<cell label="消息类型" name="messageType">
{{ cellData.rowData.messageType }}
</cell>
<cell label="推送方式" name="pushChannels">
{{ cellData.rowData.pushChannels.join('|') }}
</cell>
<cell label="消息推送" name="pushChannels">
<switch value="{{ !!cellData.rowData.pushMessageStatus }}" />
</cell>
</table>
</module>
</page>

export default XPage({
data:{
tableData: [
{
taskId: '470',
messageType: '营销',
pushChannels: ['短信', '微信公众号'],
pushMessageStatus: 1,
},
{
taskId: '262',
messageType: '营销',
pushChannels: ['短信', '微信公众号'],
pushMessageStatus: 0,
},
{
taskId: '583',
messageType: '营销',
pushChannels: ['短信', '微信公众号'],
pushMessageStatus: 1,
},
{
taskId: '33',
messageType: '生产',
pushChannels: ['短信', '微信公众号'],
pushMessageStatus: 1,
},
]
}
});


特殊用法

在标题栏动作区,表示开启或关闭该模块下的内容

PCPhonePad
<page>
<module title="履约方式">
<module title="自提">
<actions>
<switch value="{{isSelfPickup}}" bindchanged="(value) => handleChanged('selfPickup', value)" />
</actions>
<form dm-if="{{isSelfPickup}}" layout="horizontal">
<item node="date-picker" label="开始时间" name="startTime" placeholder="请输入" required colspan="{{span:3}}"></item>
<item node="date-picker" label="结束时间" name="endTime" placeholder="请输入" required colspan="{{span:3}}"></item>
<item node="select" label="预约天数设置" name="appointmentDays" data="{{dayList}}" placeholder="placeholder" colspan="{{span:6}}"></item>
<item node="select" label="门店预留备货时间(MIN)" name="preserveStockingTime" tips="我是提示" data="{{dayList}}" placeholder="placeholder" required colspan="{{span:6}}"></item>
</form>
</module>
<module title="配送">
<actions>
<switch value="{{isDelivery}}" bindchanged="(value) => handleChanged('delivery', value)" />
</actions>
<form dm-if="{{isDelivery}}" layout="horizontal">
<item node="date-picker" label="开始时间" name="startTime" placeholder="请输入" required colspan="{{span:3}}"></item>
<item node="date-picker" label="结束时间" name="endTime" placeholder="请输入" required colspan="{{span:3}}"></item>
<item node="select" label="预约天数设置" name="appointmentDays" data="{{dayList}}" placeholder="placeholder" colspan="{{span:6}}"></item>
<item node="select" label="门店预留备货时间(MIN)" name="preserveStockingTime" tips="我是提示" data="{{dayList}}" placeholder="placeholder" required colspan="{{span:6}}"></item>
</form>
</module>
</module>
</page>

export default XPage({
data:{
isSelfPickup: true,
isDelivery: false,
dayList: [{
label: '5天',
value: 5
}, {
label: '10天',
value: 10
}, {
label: '15天',
value: 15
}, {
label: '30天',
value: 30
}],
},
handleChanged(type, value) {
if (type === 'selfPickup') {
this.setData({
isSelfPickup: value
}, () => {
//do something
console.info('selfPickup', this.data.isSelfPickup)
});
} else if (type === 'delivery') {
this.setData({
isDelivery: value
}, () => {
//do something
console.info('delivery', this.data.isDelivery)
});
}

}
});


Attributes

参数说明类型可选值默认值版本
name名称String----PC/Mobile--
value绑定值Boolean----PC/Mobile--
disabled禁用Boolean--falsePC/Mobile--
activeText开启时显示的文案String----PC/Mobile--
inactiveText关闭时显示的文案String----PC/Mobile--
beforeChange改变前钩子函数Function(oldValue: Boolean): Boolean----PC/Mobile--

Events

名称说明回调参数版本
changed值改变后触发(value)PC/Mobile--