在vxe的功能组件中,输入框input只能用于填写,而下拉容器只能选择数据。然而,在下拉容器中,其实也存在输入框input,那么,基于下拉容器的input,就可以实现可填可选的效果。
一、效果
直接输入:
下拉选项
二、实现
<template>
<div>
<vxe-pulldown ref="pulldownRef">
<template #default>
<vxe-input v-model="inputValue" style="width: 100px">
<template #suffix>
<i class="vxe-icon-arrow-down" @click="selectData()"></i>
</template>
</vxe-input>
</template>
<template #dropdown>
<div class="my-dropdown1" >
<div class="list-item1" v-for="item in selectList"
:key="item.value" @click="selectEvent(item.value)">
<span>{{ item.label }}</span>
</div>
</div>
</template>
</vxe-pulldown>
</div>
</template>
<script>
export default {
name: "inputOrSelect",
data() {
return {
inputValue:undefined,
selectList:[
{ label: '选项1', value: '选项1' },
{ label: '选项2', value: '选项2' },
{ label: '选项3', value: '选项3' },
{ label: '选项4', value: '选项4' }
]
}
},
methods: {
selectData() {
console.log(this.$refs.pulldownRef)
//切换下拉面板
this.$refs.pulldownRef.togglePanel()
//this.$refs.pulldownRef[0].togglePanel()
},
selectEvent(val) {
console.log(val)
this.inputValue = val
//切换下拉面板
this.$refs.pulldownRef.togglePanel()
//this.$refs.pulldownRef[0].togglePanel()
}
}
}
</script>
<style scoped>
</style>
- 下拉容器使用ref绑定组件,ref=“pulldownRef”
- 下拉容器的输入框绑定输入值inputValue,使用自定义插槽添加向下箭头的后缀图标,并绑定事件selectData()用于开启下拉选项
- 下拉容器利用div标签和v-for用于显示下拉选项,在div标签上绑定selectEvent()事件用于选中下拉数据后的回调
- 在下拉容器的API中togglePanel()用于切换下拉面板,所以在selectData()使用togglePanel()打开下拉面板,而在selectEvent()使用togglePanel()关闭下拉面板
三、注意
在利用this.$refs.pulldownRef时获取到的数据可能直接就是需要的下拉容器组件,但是有时返回的是一个集合,这就需要额外判断使用的是哪一个下拉容器了。例如,使用console.log(this.$refs.pulldownRef)打印:此时如果选择第一个下拉容器则使用this.$refs.pulldownRef[0].togglePanel()