<template>
<view class="uni-switch">
<switch
:checked="checked"
@change="onChange"
/>
</view>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
export default defineComponent({
name: 'UniSwitch',
props: {
modelValue: {
type: Boolean,
default: false,
},
},
setup(props, { emit }) {
const checked = ref(props.modelValue);
const onChange = (event: Event) => {
const target = event.target as HTMLInputElement;
checked.value = target.checked;
emit('update:modelValue', checked.value);
};
return {
checked,
onChange,
};
},
});
</script>
<style scoped>
.uni-switch {
/* 样式按需定制 */
}
</style>
这段代码定义了一个名为UniSwitch
的Vue组件,它使用了Vue 3和TypeScript,并通过setup
函数和ref
来管理组件的状态。组件接受一个modelValue
作为输入属性,并在内部使用checked
来跟踪开关状态。当开关状态改变时,onChange
方法会被触发,并更新checked
的值,同时通过自定义事件update:modelValue
将新值发送给父组件。