ElementUI select 可搜索 问题修复

391 阅读1分钟

【问题描述】: 在使用ElementUI select 组件时,使用filter-method可搜索来实现与后端接口的交互,当我在搜索框输入字段,后台返回字段后自动清除,导致功能不可用

【问题代码】:

``

<template> 
   <el-select 
   v-model="selectVal" 
   filterable 
   clearable
   placeholder="请选择" 
    :loading="loading"
   :filter-method="getBlackData" 
   @clear="getBlackData"
   >
      <el-option v-for="(item,index) in options" :key="index" :label="item.label" :value="item.value" > 
      </el-option>
   </el-select> 
</template>
<script>
import {getData,} from '@/api';
export default {
  data() { 
   return { 
       mockOptions: [
        { value: '选项1', label: '黄金糕' }, 
        { value: '选项2', label: '双皮奶' }, 
        { value: '选项3', label: '蚵仔煎' }, 
        { value: '选项4', label: '龙须面' }, 
        { value: '选项5', label: '北京烤鸭' }
       ],
       selectVal: '',
       timer: null
     };
   },
   methods: {
     getBlackData(val) {
      this.loading = true; 
      getData(val).then(res=>{
      this.loading = false;
      this.options = res || [];
      }).catch(()=>{
       this.loading = false;
      });
     }
   }
 } 
</script>

【官网示例】: 为el-select添加filterable属性即可启用搜索功能。默认情况下,Select 会找出所有label属性包含输入值的选项。如果希望使用其他的搜索逻辑,可以通过传入一个filter-method来实现。filter-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。

<template> 
<el-select v-model="value" filterable placeholder="请选择">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select> 
</template> 
<script> 
export default {
data() { 
return { 
options: [
{ value: '选项1', label: '黄金糕' }, 
{ value: '选项2', label: '双皮奶' },
{ value: '选项3', label: '蚵仔煎' }, 
{ value: '选项4', label: '龙须面' }, 
{ value: '选项5', label: '北京烤鸭' }
], 
value: ''
} 
} 
} 
</script>

【问题解决】:

<el-option v-for="(item,index) in options" :key="index" :label="item.label" :value="item.value" > 

里面v-for key用的index,如果用item.value,就好了,需要和value保持一致;

待续。。。

我要看一下为什么index不可以

【乱写为了揍够字数,不好意思】