需求:使用el-autocomplete实现轻量级搜索(联想输入)
结果遇到了有点tricky的地方,记录一下😉
1、首先绑定的值是借助了v-for循环的数据包生成,而非自定义
2、el-autocomplete的value-key属性决定单击下拉框后的回显
3、select事件可自定义传参
@select="((item)=>{handleSelect(item, bankForm)})"
4、定义的事件彼此可以再调用,但要保证传参正确
代码片段如下:
<el-autocomplete
class="inline-input"
v-model="bankForm[bank.display_field]"
:placeholder="bankForm[bank.display_field]"
:trigger-on-focus="false"
value-key="simp_name"
:debounce=0
size="mini"
:fetch-suggestions="loadBanks"
@select="((item)=>{handleSelect(item, bankForm)})"
ref="autocomplete"
@change="handleChange"
>
<template slot-scope="{ item }">
<div class="" :title="item.simp_name">{{ item.simp_name }}</div>
</template>
</el-autocomplete>
mounted: {
loadBanks(vague,callback) {
axios({
method: 'post', url: '',
data: {
ajax: true, act: '', vague:vague,
},
}).then(response => {
let resp = response.data;
if (resp.success) {
this.chooseBanks = resp.objectMap.banks;
clearTimeout(this.timeout);
this.timeout = setTimeout(() => {
callback(this.chooseBanks);
}, 100 * Math.random());
} else {
Valert({msg:resp.message});
}
}).catch(function (error) {
Valert({msg:error});
});
},
// 重存bankForm
handleSelect(item, form){
for(let key in form){
if(item.simp_name == form[key]){
if(key.substr(key.length - 1) == 'e'){
this.bankForm.account_bank = item.def_bankcode;
} else if (key.substr(key.length - 1) == '2'){
this.bankForm.account_bank2 = item.def_bankcode;
}
}
}
this.flag = true;
},
// 判断银行
handleChange(val){
if(this.chooseBanks.length == 0){
this.flag = false;
} else {
for(let i = 0; i<this.chooseBanks.length;i++){
if(val == this.chooseBanks[i].simp_name){
this.handleSelect(this.chooseBanks[i],this.bankForm);
return;
}
}
this.flag = false;
}
},
},