likes
comments
collection
share

如何使用ant design vue的a-select下拉框,实现既能输入内容,也可以下拉选择的效果

作者站长头像
站长
· 阅读数 36

接到需求的 第一反应是使用a-select,加个search效果当输入框,但是写出来发现有问题,收集不到键入的值,于是研究了一下

问题描述:

a-select的@search事件,当失去焦点时,input值会清空,值无法绑定给v-model,效果如图:

如何使用ant design vue的a-select下拉框,实现既能输入内容,也可以下拉选择的效果

解决方案: 1.(旧版本)

antdv 旧版本的change事件可以拿到input修改的value值,直接给v-model绑定上就行。

注:后面不知道在哪个版本里更新了, change事件里只能拿到event事件元素本身,拿不到input值。

2.(修改mode 强烈推荐)

如果无法结合@search @change事件解决你的问题的话,看看下面这种方案:

只需要改一下mode属性,@search就可以拿到最新的input值。

mode="SECRET_COMBOBOX_MODE_DO_NOT_USE"

我这里antdv采用的是4.x的版本,这个属性目前官方文档里是没有的,但确实好用!!亲测!

有兴趣的同学可以翻一下源码是有这个属性的:

如何使用ant design vue的a-select下拉框,实现既能输入内容,也可以下拉选择的效果

最后 实现了想要的效果!

如何使用ant design vue的a-select下拉框,实现既能输入内容,也可以下拉选择的效果

贴上demo代码:

<template>
	请选择:
	<a-select v-model:value="keyValue"
            allowClear
            mode="SECRET_COMBOBOX_MODE_DO_NOT_USE"
            show-search 
            style="width: 20%"
            :options="options" @change="handerChange">
	</a-select>
            <br />绑定最新值:{{ keyValue }}
</template>

<script setup>
import { ref } from 'vue';
const options = ref([]);
const keyValue = ref('');
for (let i = 10; i < 36; i++) {
	const value = i.toString(36) + i;
	options.value.push({
		label: value,
		value,
	});
}
const handerChange = (value) => {
}
</script>
转载自:https://juejin.cn/post/7358446362575355914
评论
请登录