在element-ui的select下拉框加上滚动加载

在项目中,我们需要运用到很多来自后端返回的数据。有时是上百条,有时甚至上千条。如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此。
所有针对element-ui的select下拉框加上滚动加载。

这里通过自定义封装vue指令进行封装。
以下以element-ui中的select为例:
一、在src/utils文件夹下新建directives.js:

import Vue from 'vue'
export default {}.install = (Vue, options = {}) => {
  Vue.directive('loadmore', {
    inserted(el, binding) {
      // 获取element-ui定义好的scroll盒子
      const SELECTDOWN_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
      SELECTDOWN_DOM.addEventListener('scroll', function() {
        const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight
        if (CONDITION) {
          binding.value()
        }
      })
    }
  })
}

v-loadmore: 用于在element-ui的select下拉框加上滚动到底事件监听
scrollHeight 获取元素内容高度(只读)
scrollTop 获取或者设置元素的偏移值,常用于, 计算滚动条的位置, 当一个元素的容器没有产生垂直方向的滚动条, 那它的scrollTop的值默认为0.
clientHeight 读取元素的可见高度(只读)
如果元素滚动到底, 下面等式返回true, 没有则返回false
scrollHeight - scrollTop === clientHeight

二、在main.js里注册

// 注册滚动条加载触发事件v-loadmore绑定
import directives from './utils/loadMore'
Vue.use(directives)

三、使用

 <el-select v-model="ruleForm.TypeId" placeholder="请选择" v-loadmore="loadMore" popper-class="classification">
  <el-option v-for="item in optionsArr" :key="item.value" :label="item.typeName" :value="item.value" ></el-option>
</el-select>

data(){
	returen {
	 page:1,
	 pageSize:10,
	}
}

methods: {
    loadMore(){  // 这里写入要触发的方法
      this.pageSize += 10;  
      this.getClassification();  //查询的函数
    },
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值