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>


目录
相关文章
|
开发工具 git
【Cron表达式】基于Vue2及Element的Cron时间表达式生成器
首先感谢两位开源作者的奉献(ldang264),(1615450788)以下代码功能项,全部基于这两个开源库所做的合集。并增加了部分功能项,删减了中英切换等
【Cron表达式】基于Vue2及Element的Cron时间表达式生成器
项目打包报错“caniuse-lite is outdated. Please run next command `npm update`”的解决方案
项目打包报错“caniuse-lite is outdated. Please run next command `npm update`”的解决方案
1186 1
|
数据采集 资源调度 JavaScript
极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图
本文介绍了使用 Vue Flow 绘制流程图的方法与技巧。Vue Flow 是一个灵活强大的工具,适合自定义复杂的流程图。文章从环境要求(Node.js v20+ 和 Vue 3.3+)、基础入门案例、自定义功能(节点与连线的定制、事件处理)到实际案例全面解析其用法。重点强调了 Vue Flow 的高度灵活性,虽然预定义内容较少,但提供了丰富的 API 支持深度定制。同时,文中还分享了关于句柄(handles)的使用方法,以及如何解决官网复杂案例无法运行的问题。最后通过对比 mermaid,总结 Vue Flow 更适合需要高度自定义和复杂需求的场景,并附带多个相关技术博客链接供进一步学习。
Element el-time-picker el-time-select 时间选择器详解
本文目录 1. 概述 2. 选择任意时间 3. 默认时间设置 4. 时间格式设置 5. 指定可选时间段 6. 选择时间点 7. 时间选择变化事件
5833 0
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第27天】随着物联网技术的快速发展,智能设备已广泛应用于生活和工业领域。然而,物联网设备的安全问题日益凸显,主要威胁包括中间人攻击、DDoS攻击和恶意软件植入。本文探讨了物联网设备的安全防护策略和最佳实践,包括设备认证和加密、定期更新、网络隔离以及安全标准的制定与实施,旨在确保设备安全和数据保护。
710 0
|
移动开发 缓存 应用服务中间件
踩坑记录:请求接口status返回0
踩坑记录:请求接口status返回0
1210 127
踩坑记录:请求接口status返回0
|
JavaScript 前端开发
Vue3中teleport 组件是干什么用的
Vue3中teleport 组件是干什么用的
606 1
|
数据挖掘 API 区块链
《区块链公链数据分析简易速速上手小册》第2章:数据获取基础(2024 最新版)
《区块链公链数据分析简易速速上手小册》第2章:数据获取基础(2024 最新版)
880 0

热门文章

最新文章