Skip to content

Switch 开关

表示两种相互对立的状态间的切换,多用于触发「开/关」。

基础用法

通过标签 NueSwitch 生成一个开关组件。

通过 v-model 绑定开关状态。

<template>
    <nue-div align="center" :divider="{}">
        <nue-switch v-model="state"></nue-switch>
        <nue-text>{{ stateText }}</nue-text>
    </nue-div>
</template>

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

    const state = ref(false);

    const stateText = computed(() => {
        return state.value ? '开' : '关';
    });
</script>

大小

通过属性 size 设置开关组件的大小,可选值为 smalllarge,不指定则为默认大小。

<template>
    <nue-div align="center">
        <nue-switch v-model="state" size="small"></nue-switch>
        <nue-switch v-model="state"></nue-switch>
        <nue-switch v-model="state" size="large"></nue-switch>
    </nue-div>
</template>

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

    const state = ref(false);
</script>

文字描述

通过属性 show-text 设置开关描述文字是否显示,接受 boolean 类型值,默认为 false 。

通过属性 active-textinactive-text 设置开关的描述文字,接受 string 类型值,默认值分别为 I 和 O。

<template>
    <nue-div align="center" class="vp-raw">
        <nue-switch v-model="state1" show-text />
        <nue-switch
            v-model="state2"
            active-text="开"
            inactive-text="关"
            show-text
        />
        <nue-switch
            v-model="state3"
            active-text="当前状态为开"
            inactive-text="状态:关"
            show-text
        />
    </nue-div>
</template>

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

const state1 = ref(false);
const state2 = ref(false);
const state3 = ref(false);
</script>

设置禁用状态

通过属性 disabled 设置开关组件的禁用状态,接受 boolean 类型值,默认为 false 。

<template>
    <nue-div align="center">
        <nue-switch v-model="state"></nue-switch>
        <nue-switch v-model="state" disabled></nue-switch>
    </nue-div>
</template>

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

    const state = ref(false);
</script>

加载状态以及切换前的回调函数

通过属性 loading 设置开关组件的加载状态,接受 boolean 类型值,默认为 false 。

通常属性 loading 与切换前的回调函数 before-switch 搭配使用。在 before-switch 回调函数中,只有返回 Resolved Promise 或是布尔类型 ture 时才会使开关组件的状态发生改变。

<template>
    <nue-div align="center">
        <nue-switch
            v-model="state"
            show-text
            active-text="点击关闭"
            inactive-text="点击打开"
            :loading="loading"
            :before-switch="handleBeforeSwitch"
        ></nue-switch>
    </nue-div>
</template>

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

    const state = ref(false);
    const loading = ref(false);

    const handleBeforeSwitch = async (state: boolean) => {
        loading.value = true;
        const stateText = state ? '关闭' : '打开';
        const valid = await new Promise(resolve => {
            setTimeout(() => resolve(Math.random() >= 0.3), 1000);
        });
        if (valid) {
            NueMessage.success(`${stateText}成功`);
        } else {
            NueMessage.error(`${stateText}失败`);
        }
        loading.value = false;
        return valid;
    };
</script>

Released under the MIT License.