elementui-select懒加载+模糊搜索

element UI—select

在开发过程中,select下拉数据由于后端返回的数据量太大,打开页面时会造成非常卡断的问题,需要优化处理

一、创建一个自定义指令(v-loadmore)

export default {
    install(Vue) {
     // 滚动加载更多
     Vue.directive('loadMore', {
          bind(el, binding) {
            // 获取element,定义scroll
            let select_dom = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
            select_dom.addEventListener('scroll', function () {
              let height = this.scrollHeight - this.scrollTop <= this.clientHeight;
                  if (height) {
                       binding.value()
                    }
                })
            }
        });
    }
}

二、在main.js里面全局注册一下

import loadMore from '@/utils/selectLoadmore'

三、在需要的地方引入使用

<el-form-item label=":" prop="role">
  <el-select size="small" v-loadMore="loadmore" filterable remote v-model="formObj.role" :remote-method="remoteMethodR" @visible-change="handleVisitChangeR"
   :popper-append-to-body="false" :placeholder="$t('tips.holderSelect')" :disabled="isDisabled" clearable>
    <el-option v-for="item in roleList" :label="item.label" :value="item.value" :key="item.value"></el-option>
  </el-select>
</el-form-item>
<script>
data(){
    return {
    searchCode:null,
    //定义初始值,默认加载的数量
     confing: {
           page: 1,
           size: 30,
          },
         totalPage: 0,
     },
     roleList:[]
},
created(){
  this.loadmore();
},
methods:{
//滚动加载更多
  loadmore(){
   if (this.confing.page == 1 || this.confing.page <= this.totalPage) {
        let params = {...formObj};
        Obtain.queryRole(params)
          .then((res) => {
            if (res.code === 200) {
              this.totalPage = res.data.paging.totalPages;
              let tempArr = [];
              tempArr = res.data.roleList;
              tempArr = tempArr.map((item) => {
                return { label: item.id, value: item.dbkey };
              });
              this.roleList = this.confing.page == 1 ? tempArr : [...this.roleList, ...tempArr];
            } else {
              this.$message.error(res.msg);
            }
          })
          .catch((err) => {});
      }
      this.confing.page++;
  }
}
</script>

四、模糊查询

根据elementu-UI提供的API:

为了启用远程搜索,需要将filterable和remote设置为true,同时传入一个remote-method。remote-method为一个Function
visible-change 下拉框出现/隐藏时触发

remoteMethodR(val){
 if (val && val.length > 0) {
      this.confing.page = 1;
      this.roleList= [];
      this.searchCode = val;
      this.loadmore();
    } else {
       this.searchCode = "";
       this.roleList= [];
    }
},
handleVisitChangeR(val){
 if (!val) {
      this.searchCode = "";
      this.confing.page = 1;
      this.roleList= [];
    } else {
       this.loadmore();
    }
}

总结

以上就是对select下拉数据量太大造成页面卡顿的优化处理,有不足的地方请指教

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值