下拉列表的数据如果过多的话, 用户用起来会十分麻烦, 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>
效果图 :

在这里插入图片描述

GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45 7 个月前
a07f3a59 * Update transition.md * Update table.md * Update transition.md * Update table.md * Update transition.md * Update table.md * Update table.md * Update transition.md * Update popover.md 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐