基于element-plus的选择组件el-select实现下拉加载封装

news/2024/5/20 4:53:29 标签: vue3, el-select, 下拉加载, ts

 在vue3项目当中使用element-plus的UI组件el-select选择器,有时候会用到选择器下拉下载的功能,封装一个指令可以进行这样操作。

在main.ts 当中封装v-loadmore指令:

app.directive('load-more', {
  updated(el, binding) {
    const trigger: HTMLElement = el.querySelector('.select-trigger')!;
    const id: string = trigger.getAttribute('aria-describedby')!;
    if (id) {
      const popper: HTMLElement = document.getElementById(id)!;
      const selectWrap: HTMLElement = popper.querySelector(
        '.el-scrollbar .el-select-dropdown__wrap'
      )!;
      /**
       * scrollHeight 获取元素内容高度(只读)
       * scrollTop 获取或者设置元素的偏移值,
       *  常用于:计算滚动条的位置, 当一个元素的容器没有产生垂直方向的滚动条, 那它的scrollTop的值默认为0.
       * clientHeight 读取元素的可见高度(只读)
       * 如果元素滚动到底, 下面等式返回true, 没有则返回false:
       * ele.scrollHeight - ele.scrollTop === ele.clientHeight;
       */
      // 提前1个元素加载数据
      selectWrap.addEventListener('scroll', () => {
        const { scrollHeight, scrollTop, clientHeight } = selectWrap;
        const conditon = scrollHeight - scrollTop - 34 < clientHeight;
        if (conditon) {
          binding.value();
        }
      });
    }
  }
});

在组件当中使用:

<el-select
      v-model="tokenSymbolVal"
      v-bind="$attrs"
      v-load-more="handleEcoScroll"
      class="w-full"
      clearable
      filterable
      remote
      collapse-tags-tooltip
      reserve-keyword
      :placeholder="$t('eth.selectToken')"
      remote-show-suffix
      :remote-method="handleRemoteMethod"
      :loading="initLoad"
      :no-data-text="$t('cross.birdge')"
      @visible-change="handleVisibleChange"
      @change="handleSelectChange"
      @clear="handleSelectClear"
    >
      <el-option
        v-for="item in tokenList.list"
        :key="item.ecosystem"
        :label="item.tokenSymbol"
        :value="String(item.ecosystem)"
      >
        <div class="flex justify-between items-center">
          <span>{{ item.tokenName }}</span>
          <div class="flex items-center">
            <span>
              {{ item.balance }}
            </span>
            <span class="ml-1">
              {{ item.tokenSymbol }}
            </span>
          </div>
        </div>
      </el-option>
    </el-select>

加载函数:

const handleEcoScroll = () => {
  if (scrollLoad.value) {
    return;
  }
  const totalHistory = tokenList.pageNum.total;
  console.log(totalHistory);
  const { page } = tokenList.pageNum;
  console.log('🚀 ~ file: CrossIn.vue:143 ~ handleEcoScroll ~ page:', page);
  const { limit } = objToken.value;
  const num = Math.ceil(totalHistory / limit);
  console.log(num);
  if (num > page) {
    objToken.value.page += 1;
    console.log(objToken.value.page);
    handleTokenList(chainName, objToken.value);
  }
};


http://www.niftyadmin.cn/n/5044488.html

相关文章

医学影像信息(PACS)系统软件源码

PACS系统是PictureArchivingandCommunicationSystems的缩写&#xff0c;与临床信息系统&#xff08;ClinicalInformationSystem,CIS&#xff09;、放射学信息系统(RadiologyInformationSystem,RIS)、医院信息系统(HospitalInformationSystem,HIS)、实验室信息系统&#xff08;L…

天津乾瑞晟达积极加大研发投入 满足行业发展需求

天津乾瑞晟达新能源科技有限公司多年以来,坚持新能源汽车零部件的研发、生产以及销售等综合业务,成为了一家有实力的综合制造企业。为了满足行业发展需求,该公司积极加大研发投入,持续推动科技创新。 根据最新的财务报告显示,天津乾瑞晟达公司为了研发新的项目,确保可以使项目…

图像语义分割概述

图像语义分割概述 一、图像语义分割概念 图像语义分割&#xff08;Image Semantic Segmentation&#xff09;是一项计算机视觉任务&#xff0c;其目标是将输入的图像分割成多个区域&#xff0c;并为每个像素分配一个语义类别标签&#xff0c;以表示该像素属于图像中的哪个物体…

ZZNUOJ_C语言算法题目(AC代码)

ZZNUOJ_C语言算法题目 1000 : AB Problem1001 : 植树问题1002 : 简单多项式求值1003 : 两个整数的四则运算1004 : 三位数的数位分离1005 : 整数幂1006 : 求等差数列的和1007 : 鸡兔同笼1008 : 美元和人民币1009 : 求平均分1010 : 求圆的周长和面积1011 : 圆柱体表面积1012 : 求…

什么是UWB定位技术?UWB定位的应用场景及功能介绍

说到定位我们并不陌生&#xff0c;定位技术一直与我们的生活密不可分&#xff0c;比如最常见的车辆导航。 根据使用场景&#xff0c;定位技术分为室内定位和室外定位。 室外定位主要依靠GPS&#xff0c;北斗&#xff0c;GLONASS&#xff0c;伽利略等全球卫星定位导航系统。室内…

Spring面试题13:Spring中ApplicationContext实现有哪些?Bean工厂和Applicationcontext有什么区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring中ApplicationContext实现有哪些? 在Spring框架中,有以下几种ApplicationContext的实现: ClassPathXmlApplicationContext:从类路径下的…

OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)

边缘检测原理 1&#xff0c;Sobel算子 1.1代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [SimHei]img cv.imread("lena.png",0)#计算sobel卷积结果 x cv.Sobel(img,cv.CV_…

RSD处理气象卫星数据——常用投影

李国春 气象卫星扫描刈幅宽覆盖范围广&#xff0c;在地球的不同位置可能需要不同的投影以便更好地表示这些观测数据。这与高分辨率的局地数据有很大不同&#xff0c;高分数据更倾向于用使用处理局地小范围的投影方式。本文选择性介绍几种RSD常用的适合低、中、高纬和极地地区的…