element 下拉框滚动加载

简介: element 下拉框滚动加载

有时候select里面的数据会很多,这时候就需要分页,那么我们如何监听select触底呢?

这时候我们就要写一个自定义指令,然后在main.js中注册

v-load-more=‘loadMore’

1、在main.js同级目录下创建 directives.js文件

import Vue from 'vue'
let MyPlugin = {}
// 定义全局指令
export default MyPlugin.install = function(vue, options) {
  // loadmore 是定义的指令 名称 , 使用时 用 v-loadmore = "dosomethingFun or data"
  Vue.directive('loadmore', {
      // bind只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置
      bind (el, binding) {
        // 获取element-ui定义好的scroll盒子  Select 选择器的下拉盒子
        const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
        SELECTWRAP_DOM.addEventListener('scroll', function () {
          // 判断滚动到底部
          const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight
          if (CONDITION) {
              // binding.value 是指令的绑定值,该值可能是字符串,数字、函数
              // binding.value() 表示执行 v-loadmore 绑定的函数
            binding.value()
          }
        })
      }
    })
}

2、在main.js中应用全局指令

// Vue.use 需要在 new Vue() 之前使用
// 引用创建好的指令
import directives from './directives'
// 全局注册指令
Vue.use(directives)
new Vue({
  el: '#app',
  router,
  store,
  template: '<App/>',
  components: { App }
})

3、在项目文件demo.vue 使用 Select 选择器,调用指令来监听滚动加载数据

<template>
  // v-loadmore 是前文注册过的指令,  loadMore 是指令绑定的值  相当于前文的 binding.value,由于指令值是函数,前文使用了 binding.value()执行调用
  <el-select v-model="id" v-loadmore="loadMore">
    <el-option v-for="item in bmList" :key="item.id" :label="item.name" :value="item.id">
    </el-option>
  </el-select>
</template>
<script>
import {
    getBMList,
} from '@/api/store'
export default {
  data(){
    return {
      bmList: [],
      id:''
    }
  },
  methods: {
    loadMore(){
      getBMList().then(res => {
            const newList = res.data.data
            if (newList.length > 0) {
              this.bmList.push(...newList)
            }
          })
    }
  }
}
</script>


目录
相关文章
|
传感器 小程序
微信小程序新版隐私协议弹窗实现最新版
微信小程序新版隐私协议弹窗实现最新版
2680 1
|
机器学习/深度学习 数据采集 vr&ar
3D重建范式变革!最新模型MVDiffusion++
【2月更文挑战第30天】MVDiffusion++,一项革命性的3D重建技术,能在少量图像和无相机姿态信息下生成高密度、高分辨率的3D视图,简化重建流程。采用无姿态架构和视图丢弃策略,提升效率和质量。在Objaverse和Google Scanned Objects数据集上表现优越,且能与文本到图像生成模型结合,潜力广泛应用于游戏、电影和虚拟现实。然而,对训练数据质量和计算资源的需求是其挑战。
225 4
3D重建范式变革!最新模型MVDiffusion++
|
JavaScript
vue element plus Select 选择器
vue element plus Select 选择器
966 0
|
缓存 关系型数据库 数据库
如何优化 PostgreSQL 数据库性能?
如何优化 PostgreSQL 数据库性能?
553 2
|
JavaScript 数据库
vue使用element ui实现下拉列表分页的功能!!!
vue使用element ui实现下拉列表分页的功能!!!
|
编译器 C语言 C++
C语言基础教程(宏的使用和多文件编程)
C语言基础教程(宏的使用和多文件编程)
345 0
vscode——Prettier插件保存自动格式化
vscode——Prettier插件保存自动格式化
514 0
|
Java Maven
springboot如何进行简单的测试
springboot如何进行简单的测试
515 0
|
前端开发 JavaScript
Vue3配置Tailwind CSS
Tailwind CSS Tailwind是由Adam Wathan领导的TailwindLabs开发的 CSS 框架。
|
JavaScript 前端开发
Vue3中teleport 组件是干什么用的
Vue3中teleport 组件是干什么用的
340 1