vue element el-select下拉滚动加载的方法

使用vue+element的el-select下拉框加载返回数据太多时,会造成卡顿,用户体验欠佳,记录一个滚动加载的方法:

1、挂载一个全局的方法(main.js):

// 滚动加载更多
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()
      }
    })
  }
});

2、demo设置(template结构)

<template>
  <el-form-item label="所属分类">
    <el-select
      v-model="curr"
      placeholder="分类"
      @change="change"
      v-loadMore="loadMore"
      clearable filterable>
        <el-option
          v-for="item in list"
          :key="item.id"
          :label="item.name"
          :value="item.value">
         </el-option>
     </el-select>
  </el-form-item>
</template>

3、字段设置(data)

data(){
  return {
        curr:'', 
        names:[],
    list:[],
        pageData: {
      index: 1,
      size: 100
    },
  }
},

4、事件方法(methods)

methods:{
  // 加载更多
  loadMore() {
        this.pageData.index++;
        this.sceneData(this.pageData);
  },
  // 请求数据
  async sceneData(){
    let self=this
    this.names= []; // 清空
    let num = this.pageData.index * this.pageData.size;
    const {data,code,message}=await apiList({});
    if(code===0){
      self.names= data
      self.list= self.id.filter((item, index, arr) => {
            return index < num;
      });
    }
  },
}

原文地址:https://blog.csdn.net/weixin_42342065/article/details/128037199