赞
踩
下拉列表的数据如果过多的话, 用户用起来会十分麻烦, 100多条的数据, 总不能让用户一直往下拉去找她要的那条, 所以远程搜索就用上了, 用户一直输入关键字, 一直匹配. 但是如果是第一次点开下拉列表, 数据过多会导致2秒钟的卡顿, 姑且是dom渲染引起的, 笔者下面就用一个比较暴力的方法来解决这个交互.
<el-select v-model="form.F_ADDR_LANE" filterable remote :remote-method="remoteMethod" :disabled="!form.F_ADDR_DISTRICT" no-data-text="无匹配数据" placeholder="请选择路牌"> <el-option v-for="item in roadDataList" :key="item.DM" :label="item.MC" :value="item.DM"></el-option> <div v-if="roadDataList.length > 49" class="search-keyword"> <span>只显示前50条结果,请完善搜索关键字</span> </div> </el-select> ... <script> ... export default { data () { return { form: { F_ADDR_LANE: '', F_ADDR_DISTRICT: '' }, roadDataList: [], roadDataList_: [] // 列表数据如下: [{DM: "4419000933037", MC: "主山大井头六街一横巷"}, [{DM: "4419000933038", MC: "主山大井头六街二横巷"}] } }, create: { this.setDistrict() }, methobs: { async setDistrict () { const data = await getAdd() if(data) { this.roadDataList_ = data.data // 先存一份完整的 this.roadDataList = data.data.slice(0, 50) // 然后渲染到页面上的是截取前面50条的 } }, remoteMethod(query) { if (query !== '') { this.roadDataList = this.roadDataList_.filter(item => { return item.MC.indexOf(query) > -1 }).slice(0, 50) // 那么用户搜索的时候, 根据完整的列表来搜, 搜到的结果同样截取前50条, 不足50条忽略即可 } else { this.roadDataList = this.roadDataList_.slice(0, 50) // 关键字为空的时候又将完整的列表数据截取前50条渲染回去 } } } } </script> <style> .search-keyword { text-align: center; padding: 3px 0; color: #ccc; font-size: 13px; } </style>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。