问题遇到的现象和发生背景
远程搜索的下拉框,现在需要根据名字name和首拼Pin搜索,下拉框的label为name,value为code,现在根据name搜索后从后台拿到数据渲染是正常的,在根据首拼Pin搜索时,已经从后台拿到数据放入到option的list里面,但页面显示没有值,现在想要根据name和pin搜索不知道怎么实现。
问题相关代码,请勿粘贴截图
<Select
v-model="model13"
filterable
:remote-method="remoteMethod1"
:loading="loading1">
<Option v-for="(option, index) in options1" :value="option.value" :key="index">{{option.label}}Option>
Select>
<script>
export default {
data () {
return {
model13: '',
loading1: false,
options1: [],
list: [
{
label:'年糕',
value:'0001',
pin:'ng'
},
{
label:'松仁',
value:'0002',
pin:'sr'
},
{
label:'菠萝',
value:'0003',
pin:'bl'
},
]
}
},
methods: {
remoteMethod1 (query) {
if (query !== '') {
this.loading1 = true;
setTimeout(() => {
this.loading1 = false;
//假设输入的是sr,后台返回一条数据
const lists=[
{
label:'松仁',
value:'0002',
pin:'sr'
},
]
this.options1 =lists
}, 200);
} else {
this.options1 = [];
}
},
}
}
script>
运行结果及报错内容
在输入首拼后,后台返回条数据,但页面显示没有数据,应该是在option的list中匹配不到label中含有这些字母的数据
我的解答思路和尝试过的方法
<Option v-for="(option, index) in options1" :value="option.value" :key="index">{{option.label}} <span v-show='false'>{{option.pin}}span>Option>
我想要达到的结果
根据name和pin字段都能搜索成功
这个搜索 是后端搜还是 前端自己实现? 前端的话,需要写个方法 filter 数据 后端的话,直接 把值赋值给 options1 。数据结构要保持一致
这个后台处理就好了
首先你通过name可以搜索到,你绑定的是name和code,后台返回什么字段,那么首pin返回的字段也一样就行。
貌似Select组件仅支持对lable值的搜索过滤,若想实现此类功能需要其他实现方式了,比如增加输入框,实时对select组件进行过滤,过滤后的值默认选中第一个