当前位置: 首页 > news >正文

vue2+element-ui 实现下拉框滚动加载

一、自定义滚动指令。

 VUE.directive(
    'el-select-loadmore': {
      bind(el, binding) {
        const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
        SELECTWRAP_DOM.addEventListener('scroll', function () {
          /**
            * scrollHeight 获取元素内容高度
            * scrollTop 获取或者设置元素的偏移值,常用于计算滚动条的位置,当一个元素的容器没有产生垂直方向的滚动条,那它的scrollTop值默认为0
            * clientHeight 获取元素的可见高度
            * 如果元素滚动到底,下面的等式返回true,没有则返回false
          **/
          const condition = (this.scrollHeight - this.scrollTop) <= (this.clientHeight + 10);
          if (condition) {
            binding.value();
          }
        })
      }
    }
  })
 

二、绑定方法。

 data() {
    return {
      adGroupList: [],
      adGroupQuery: {
          pageNum: 1,
          pageSize: 10
      },
      typeTotal: 0,
      selectLoading: false,
    };
  },
  methods: {
    // 获取后端数据
    getAdGroupList() {
      this.selectLoading = true

      const params = {

            page: this.adGroupQuery.currentPage,

            pageSize: this.adGroupQuery.pageSize,

            param: {

                adGroup: this.adGroupQuery.adGroup

            }

       }
      getAdGroupList(params).then(
        response => {
          this.selectLoading = false
          this.adGroupList = [...this.adGroupList, ...response.result];
          this.typeTotal = response.count
        }
      );
    },
    
    //下拉框搜索方法
    remoteMethod(query) {
      this.adGroupQuery.adGroup= query
      this.adGroupQuery.pageNum = 1
      this.adGroupList= []
      this.getAdGroupList()
    },
    
    //滚动加载
    loadmore() {
      if (this.typeTotal > this.adGroupList.length) {
        this.adGroupQuery.pageNum++;
        this.getAdGroupList();
      }
    }

  },
 

三、组件绑定属性。

 <el-select

        v-model="form.materialId"

        v-el-select-loadmore="loadmore"

        placeholder="请输入AD组查询"

        filterable

        remote 

        clearable

        :remote-method="remoteMethod" 

         style="width:100%">
        <el-option v-for="(item, index) in typeList" :key="index" :label="item.name" :value="item.id">
     </el-option>
 </el-select>

http://www.lryc.cn/news/140999.html

相关文章:

  • 探索AIGC人工智能(Midjourney篇)(二)
  • 01-Flask-简介及环境准备
  • 【Git游戏】远程分支
  • Day07-ElementUI
  • 【Go 基础篇】Go语言中的defer和recover:优雅处理错误
  • 4.15 TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?
  • 如何在VSCode中将html文件打开到浏览器
  • 2022年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 五公里场地训练笔记(完整版)
  • 【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)
  • 使用 OpenAI GPT 模型的最佳实践
  • 解除用户账户控制提醒
  • 行业追踪,2023-08-23
  • 算法修炼Day60|● 84.柱状图中最大的矩形
  • 前端面试题css(一)
  • .NETCORE中关于swagger的分组
  • 4.1011
  • uniapp中引入axios的错误?
  • Discuz!论坛发帖标题字数限制80字符可以修改吗?修改发帖标题字数的方法
  • R语言画样本不均衡组的箱线图
  • ArcGIS学习总结(19)——要素转点与空间连接(属性表字段映射)
  • 【每日一题Day306】LC228汇总区间 | 双指针
  • vue中实现echarts三维散点图
  • 多头自注意力机制的代码实现
  • 抽象工厂模式
  • 登录校验-Filter-详解
  • 堆栈方法区笔记记录
  • 新版微信小程序获取用户手机号
  • CSS实践 —— 悬浮盒子阴影加上移效果
  • 安全测试基础知识