1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| <!-- 模糊检索获得推荐检索的时候 就已经获得了搜索结果 默认是获得焦点请求 修改默认输入值后匹配触发trigger-on-focus="false" querySearch 一获取焦点就输入建议的数据 包含两个参数 一个存储输入数据 一个存储推荐结果数据 handleSelect 当选中建议项时,调用该方法 keyup.enter.native 增加回车触发事件 changeStyle 解决回车后建议输入框没消失的bug --> <el-autocomplete popper-class="my-autocomplete" v-model="state" :fetch-suggestions="querySearch" placeholder="请输入内容" @select="handleSelect"> <i class="el-icon-edit el-input__icon" slot="suffix" @click="handleIconClick"> </i> <template slot-scope="{ item }"> <div class="name">{{ item.value }}</div> <span class="addr">{{ item.address }}</span> </template> </el-autocomplete>
<style> .my-autocomplete { li { line-height: normal; padding: 7px;
.name { text-overflow: ellipsis; overflow: hidden; } .addr { font-size: 12px; color: #b4b4b4; }
.highlighted .addr { color: #ddd; } } } </style>
<script> export default { data() { return { restaurants: [], state: '' }; }, methods: { querySearch(queryString, cb) { var restaurants = this.restaurants; var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants; // 调用 callback 返回建议列表的数据 cb(results); }, createFilter(queryString) { return (restaurant) => { return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0); }; }, loadAll() { return [ { "value": "三全鲜食(北新泾店)", "address": "长宁区新渔路144号" }, { "value": "Hot honey 首尔炸鸡(仙霞路)", "address": "上海市长宁区淞虹路661号" }, { "value": "新旺角茶餐厅", "address": "上海市普陀区真北路988号创邑金沙谷6号楼113" }, ]; }, handleSelect(item) { console.log(item); }, handleIconClick(ev) { console.log(ev); } }, mounted() { this.restaurants = this.loadAll(); } } </script>
|