Skip to content

Switch 开关

用于在两种状态之间切换的开关组件。

名称分类说明类型默认值
type? 风格预设主题颜色类型'primary' | 'success' | 'warning' | 'danger' | 'info'
size? 尺寸尺寸'large' | 'default' | 'small''default'
active-color? 颜色开启时的自定义十六进制颜色string
inactive-color? 颜色关闭时的自定义十六进制颜色string
disabled? 状态是否禁用booleanfalse
name? 行为原生 name 属性string
model-value / v-model? 内容绑定值booleanfalse
active-text? 内容打开时的文字string
inactive-text? 内容关闭时的文字string
active-value? 内容打开时的值boolean | string | numbertrue
inactive-value? 内容关闭时的值boolean | string | numberfalse
active-icon? 内容开启时滑块内显示的图标名称string
inactive-icon? 内容关闭时滑块内显示的图标名称string
change? 事件状态改变时触发(value: boolean) => void
ref? 暴露开关 HTML 元素Ref<HTMLInputElement>

基础用法

绑定 v-model 到一个 Boolean 类型的变量。

<template>
  <div class="demo-switch">
    <px-switch v-model="value1" />
    <px-switch v-model="value2" active-text="开" inactive-text="关" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value1 = ref(false);
const value2 = ref(true);
</script>

<style scoped>
.demo-switch {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

类型

使用 type 属性来应用预设主题颜色。

<template>
  <div class="demo-switch">
    <px-switch v-model="v1" type="primary" />
    <px-switch v-model="v2" type="success" />
    <px-switch v-model="v3" type="warning" />
    <px-switch v-model="v4" type="danger" />
    <px-switch v-model="v5" type="info" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const v1 = ref(true);
const v2 = ref(true);
const v3 = ref(true);
const v4 = ref(true);
const v5 = ref(true);
</script>

<style scoped>
.demo-switch {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

自定义颜色

使用 active-colorinactive-color 属性来设置开启/关闭状态的自定义十六进制颜色。

<template>
  <div class="demo-switch">
    <px-switch v-model="v1" active-color="#8b5cf6" inactive-color="#d4d4d8" />
    <px-switch v-model="v2" active-color="#f97316" />
    <px-switch v-model="v3" active-color="#ec4899" inactive-color="#6b7280" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const v1 = ref(true);
const v2 = ref(false);
const v3 = ref(true);
</script>

<style scoped>
.demo-switch {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

不同尺寸

使用 size 属性来设置开关的大小。

<template>
  <div class="demo-switch">
    <px-switch v-model="value1" size="large" />
    <px-switch v-model="value2" />
    <px-switch v-model="value3" size="small" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value1 = ref(true);
const value2 = ref(true);
const value3 = ref(true);
</script>

<style scoped>
.demo-switch {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

图标

使用 active-iconinactive-icon 属性来在开关滑块内显示图标。

<template>
  <div class="demo-switch">
    <px-switch v-model="v1" active-icon="check" inactive-icon="close" />
    <px-switch v-model="v2" active-icon="sun" inactive-icon="moon" type="warning" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const v1 = ref(true);
const v2 = ref(false);
</script>

<style scoped>
.demo-switch {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

禁用状态

使用 disabled 属性来禁用开关。

<template>
  <div class="demo-switch">
    <px-switch v-model="value" disabled />
    <px-switch v-model="value2" disabled />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const value = ref(false);
const value2 = ref(true);
</script>

<style scoped>
.demo-switch {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>