Vue.js - 实现ElementUI的远程搜索Select组件在失去焦点时自动创建条目功能
作者:hangge | 2025-02-01 20:49
我们知道 Element UI 的 Select 组件支持远程搜索功能,开启后可以从服务器搜索加载下拉数据条目。有时我们希望在输入内容没有返回匹配项时也支持自动创建新条目,通过 allow-create 这个属性就可以实现。但美中不足的是,创建新条目后还需要手动选择点击一下,否则无效。本文演示如何在失去焦点的时候,能够自动创建新条目。

1,效果图
(1)正常情况下,select 组件根据我们输入内容返回匹配的可选项,点击对应的选项项则将其选中。

(2)如果输入的内容没有返回匹配项,我们当 select 组件失去焦点时也会自动创建这个输入项。

2,样例代码
<template>
<div>
<el-select
ref="select"
v-model="selectedValue"
filterable
remote
reserve-keyword
:remote-method="remoteSearch"
:loading="loading"
placeholder="请输入关键词"
@change="handleChange"
@blur="handleBlur"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<span style="margin-left: 10px;">选中值:{{ selectedValue }}</span>
</div>
</template>
<script>
export default {
data() {
return {
selectedValue: null,
options: [],
loading: false,
};
},
methods: {
remoteSearch(query) {
if (query !== '') {
this.loading = true;
// 模拟远程搜索请求
setTimeout(() => {
this.options = [
{ value: 'apple', label: 'apple' },
{ value: 'banana', label: 'banana' },
{ value: 'orange', label: 'orange' }
].filter((item) => item.label.toLowerCase().includes(query.toLowerCase()));
this.loading = false;
}, 100);
} else {
this.options = [];
}
},
handleChange(value) {
// 用户选择了下拉框中的某个选项
console.log('Selected:', value);
},
// 监听 input 输入框失去焦点事件,同步 selectedValue 值
handleBlur() {
// 通过 refs 获取 el-select 组件内部的 input 输入框的值
const inputValue = this.$refs.select.$children[0].$refs.input.value;
// 将 input 输入框的值同步到 selectedValue 值
this.selectedValue = inputValue;
},
},
};
</script>
全部评论(0)