用vue3和elementPlus写一个下拉多选并且支持可输入的组件,输入框后面需要一个+图标,点击这个图标后下拉选项就显示出来
时间: 2023-05-13 20:05:47 浏览: 1082
一个vue3的高级筛选器UI组件,支持字符串、数字、下拉、级联、区域、日期、时间等多种数据类型的筛选,支持条件的分组设置
好的,这是一个比较简单的组件,以下是代码示例:
```vue
<template>
<el-select
v-model="selectedOptions"
multiple
filterable
remote
reserve-keyword
:remote-method="remoteMethod"
:loading="loading"
:placeholder="placeholder"
@focus="handleFocus"
>
<template #prefix>
<i class="el-input__icon el-icon-search"></i>
</template>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</template>
<script>
import { ref } from 'vue';
import { ElSelect } from 'element-plus';
export default {
name: 'MultiSelect',
components: {
ElSelect,
},
props: {
options: {
type: Array,
default: () => [],
},
placeholder: {
type: String,
default: '请选择',
},
},
setup(props) {
const selectedOptions = ref([]);
const loading = ref(false);
const remoteMethod = (query) => {
loading.value = true;
setTimeout(() => {
loading.value = false;
const filteredOptions = props.options.filter((option) =>
option.label.toLowerCase().includes(query.toLowerCase())
);
filteredOptions.length > 0
? (this.options = filteredOptions)
: (this.options = props.options);
}, 200);
};
const handleFocus = () => {
if (selectedOptions.value.length === 0) {
remoteMethod('');
}
};
return {
selectedOptions,
loading,
remoteMethod,
handleFocus,
};
},
};
</script>
<style scoped>
.el-input__icon {
color: #c0c4cc;
}
</style>
```
这个组件使用了 Element Plus 的 `el-select` 组件,支持多选、可输入、远程搜索等功能。在输入框后面添加了一个搜索图标,点击图标会触发下拉选项的显示。
阅读全文