el-select 远程搜索 懒加载

这篇具有很好参考价值的文章主要介绍了el-select 远程搜索 懒加载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考链接:el-select实现远程搜索和懒加载_select 懒加载_qd-hhkj的博客-CSDN博客

自定义懒加载

directives: {
    //注意:这个是写到data外面
    "el-select-loadmore": {
      bind(el, binding) {
        const SELECTWRAP_DOM = el.querySelector(
          ".el-select-dropdown .el-select-dropdown__wrap"
        );
        SELECTWRAP_DOM.addEventListener("scroll", function () {
          const condition =
            this.scrollHeight - Math.ceil(this.scrollTop) <=
            this.clientHeight + 1;
          if (condition) {
            binding.value();
          }
        });
      },
    },
}

HTML

<el-form-item label="客户列表" prop="contactsId">
          <el-select
            ref="customerLazy"
            v-model="queryParams.contactsId"
            remote
            clearable
            filterable
            placeholder="请输入客户编号"
            v-el-select-loadmore="lazyLoadingOfCustomerList"
            @focus="customerListRemoteMethod"
            :remote-method="customerListRemoteMethod"
            :loading="customerLoading">
            <el-option
              v-for="(contact,index) in csContactOptions"
              :key="index"
              :label="contact.label"
              :value="contact.contactsId">
              <template slot="default">
                <custom-avatar
                  :avatar="contact.avatar"
                  :nick-name="contact.nickName"
                  :contacts-number="contact.contactsNumber"
                />
              </template>
            </el-option>
          </el-select>
        </el-form-item>

定义变量

      // 是否正在加载中
      customerLoading: false,
      // 加载开关,加载所有后端数据后控制懒加载是否继续执行,主要防止加载到最后一条数据时,还会继续加载
      customerStopLoading: false,
      // 客户列表下拉框分页参数
      csContactOptions: [],
      customerPageData: {
        current: 1, //当前页
        size: 10, //每页显示条数
      }

方法文章来源地址https://www.toymoban.com/news/detail-609258.html

/**
    * 懒加载客户列表+远程搜索
    */
    lazyLoadingOfCustomerList() {
      if (!this.customerStopLoading) {
        this.customerPageData.current++;// 搜索下一页数据
        this.customerListRemoteMethod(this.$refs.customerLazy.query, true); //调用后端接口获取下拉框数据,此时第二个参数必须传 true,懒加载方式调用后端接口函数
      }
    },
    customerListRemoteMethod(query,lazy=false){
      // 正在加载中
      this.customerLoading = true;
      // 获取分页参数
      let param = {
        pageNum: this.customerPageData.current,
        pageSize: this.customerPageData.size,
        orderByColumn: "createTime",
        isAsc: "desc"
      };
      // 如果不是懒加载,则是第一次加载,重置分页参数
      if(lazy === false){
        this.csContactOptions = []
        this.customerPageData.current = 1;
        this.customerPageData.size = 10;
      }
      // 是否有搜索条件
      if(typeof(query)=='string'){
        param.contactsNumber = query;
        listContacts(param).then(res => {
          if (res.code === 200) {
            this.customerLoading = false;
            if((Math.floor(res.total/this.customerPageData.current)+1)<1)
            {
              this.customerStopLoading=true  // 设置停止懒加载为true
              // 直接停止执行,否则会导致下面请求数据处理添加导致重复数据
              return
            }
            this.csContactOptions = [...this.csContactOptions, ...res.rows];
          } else {
            this.$message({
              message: res.message,
              type: "error",
            });
          }
        });
      }
      else {
        // 如果是获取焦点调用本函数(第一次调用),参数val不是字符串,而是对象,此时直接查询第一页数据
        let param = {
          pageNum: 1,
          pageSize: 10,
          orderByColumn: "createTime",
          isAsc: "desc"
        }
        // 这里很重要,获取焦点第一次加载时打开懒加载开关,否则一个页面多个懒加载的的话会导致一个懒加载关闭其他都不能懒加载了。
        this.customerStopLoading=false
        listContacts(param).then(res => {
          console.log(res.code)
          if (res.code === 200) {
            this.customerLoading = false;
            if((Math.floor(res.total/10)+1)<1)
            {
              this.customerStopLoading=true  // 设置停止懒加载为true
              // 直接停止执行,否则会导致下面请求数据处理添加导致重复数据
              return
            }
            this.csContactOptions = [...this.csContactOptions, ...res.rows];
          } else {
            this.$message({
              message: res.message,
              type: "error",
            });
          }
        });
    }
  },

到了这里,关于el-select 远程搜索 懒加载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • el-select 触底分页+远程搜索

    🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿 🍟欢迎来到前端初见的博文,本文主要讲解el-select 触底分页+远程搜索🍟 👨‍🔧 个人主页 : 前端初见 🥞喜欢的朋友可以关注一下,下次更新不迷路🥞 @[TOC](文章目录) 大部分情况下使用 el-select 的时候,el-options 中 options 的值都是后端接口

    2024年02月14日
    浏览(60)
  • el-select 支持多选 搜索远程数据 组件抽取

    使用方式 组件

    2024年02月09日
    浏览(43)
  • 使用element-ui el-select 做下拉 全选+搜索 功能

    使用element-ui el-select 做下拉 全选+搜索 功能 有时候,需要用到下拉列表 全选和搜索,并且鼠标放入的时候有下拉列表展示。以前的做法是 check + el-input搜索结合做个组件,现在这个方法直接使用el-select 就能做到这个需求功能:有搜索+有全选+有取消+有确认请求+有鼠标移入自

    2024年02月11日
    浏览(58)
  • Vue+ElementUI el-select选择器:绑定的值为对象

    业务需求: el-select选择器,后台接口需要的参数为name,name会存在重复情况,前端唯一标识选择用id,所以最后决定使用select绑定对象值将数据保存下来。 实现思路: 常规的select选择器,v-model 形式绑定的参数只能是boolean,string,number,但是仔细翻阅官方文档发现,selelct是可以

    2024年02月14日
    浏览(44)
  • vue+elementUI el-select 中 没有加clearable出现一个或者多个×清除图标问题

    1、现象:下方截图多×清除图标了 2、在全局common.scss文件中加一个下方的全局样式noClear 3、在多×清除图标的组件上层div加noClear样式 4、 ×清除图标去除成功

    2024年01月19日
    浏览(50)
  • element-plus的el-select实现触底加载更多(新版本报错踩坑)

    element-plus新版增加了一个属性,且默认为true,使得下拉菜单被插入到了body元素下。即.el-select下默认不包含.el-select-dropdown了。 当依旧按照之前的方式,封装自定义指令,实现滚动到el-select下拉菜单的底部,加载更多数据的功能时就会报错。 原逻辑:  报错 原因也就是前言中

    2024年02月08日
    浏览(58)
  • Vue中ElementUI结合transform使用时,修复el-select弹框定位不准确问题

            在大屏开发中,比如将1920*1080放到更大像素(3500*2400)大屏上演示,此时需要使用到transform来对页面进行缩放,但是此时发现弹框定位出错问题,无法准备定位到实际位置。之前写过一篇讲解的是ElementUI中的el-date-picker /组件修复定位问题,经过网友不断发现和提

    2024年01月19日
    浏览(49)
  • Element VUE修改 el-input和el-select长度

     没有设置样式之前,采用默认样式,界面如下:  模拟代码如下  为了美观需要修改下样式,使文本框与下拉框的长度一致 第一种:添加style属性,采用行内样式修改长度  第二种:添加class属性,采用内部样式  stule标签中设置长度 第三种:找到element-ui.scss,采用外部样式

    2024年02月11日
    浏览(55)
  • Element-UI实现的下拉搜索树组件(el-select、el-input、el-tree组合使用)

    1、子组件封装 注意使用:正常使用 // 子组件使用 父组件调用

    2024年02月11日
    浏览(87)
  • 在vue里面,element ui,el-select表单选中校验失败

    在element 表单中我们需要校验,当表单中有数据变动时,会触发检验。 提示:这里描述项目中遇到的问题: 在项目中,提交时下拉菜单没有选,会触发校验提示,去选中下拉菜单的数据,不会再次触发校验,导致校验提示文字依然存在 一般来说遇到了校验失效问题,有值的

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包