我正在try 创建一个自定义的 Select 组件,它可以像下面这样接受选项:
<MySelect v-model='value'>
<MyOption value='1'>Option 1</MyOption>
<MyOption value='2'>Option 2</MyOption>
</MySelect>
这是我当前的自定义select组件的实现:
<template>
<div class="select">
<div class="text" @click="visible=!visible">{{modelValue ?? text}} <IconChevronDown/></div>
<div class="options" v-if="visible">
<span v-for="option in options" class="p-4 hover:bg-neutral-1 cursor-pointer capitalize" @click="select(option)">{{option}}</span>
</div>
</div>
</template>
<script setup>
const visible = ref(false)
const props = defineProps({
text: String,
options: Array,
modelValue: String
})
const emit = defineEmits(["update:modelValue"])
function select(option){
visible.value = false;
emit("update:modelValue", option)
}
</script>
这个组件接受选项作为一个props 和一个字符串array.但我需要更多的自定义选项,如添加图标或应用样式到文本.因此,将选项作为HTML传递的能力解决了这个问题.如果你能分享你的 idea ,如何实现这一点,我将不胜感激!
P.S. MySelect组件不应包含本机 Select 和选项标签.创建自定义 Select 组件的全部目的是为了设计自定义.