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

vue2+el-select实现分页加载更多功能

在这里插入图片描述


需求:

由于项目下拉框数据过多,一次性加载完,会有性能问题,于是希望可以增加分页加载更多功能。


实现效果:

如上图:点击“点击加载更多”按钮,实现分页加载下一页,直到最后一页,提示“已经到底啦~”


实现代码:

html

<el-select
  class="input-search"
  v-model="proName"
  remote
  :remote-method="getOptionList"
  @change="changePro"
  :loading="sloading"
  size="small"
  clearable
  filterable
  placeholder="请选择所属平台/App"
>
  <el-option
    v-for="item in selectList"
    :key="item.projectId"
    :label="item.projectName"
    :value="item.projectName"
  ></el-option>
  <template>
    <el-row type="flex" justify="center">
      <p
        @click="loadMorePro"
        style="font-size: 12px;color: #1368ff;cursor: pointer;"
      >
        点击加载更多
      </p>
      <p
        v-show="left.totalPage > 1 && left.pageNum == left.totalPage"
        style="color: #ccc; font-size: 12px"
      >
        已经到底啦~
      </p>
    </el-row>
  </template>
</el-select>

js核心方法:

// 触发下拉框加载更多
loadMorePro() {
      this.left.pageNum++;
      this.sloading = true;
      this.searchData = {
        pageNo: this.left.pageNum,
        pageSize: this.left.pageSize,
        projectName: this.left.projectName || ''
      };
      listProject(this.searchData)
        .then(res => {
          if (res.data && res.data.records) {
          	// 加载的新1页数据,与之前加载的数据合并
            this.selectList = [...this.selectList, ...res.data.records];
            // 总页数控制是否显示加载更多按钮,如果后端接口未返回,可使用total总条数计算也可
            this.left.totalPage = res.data.pages || 1; 
          }
          this.sloading = false;
        })
        .finally(() => {
          this.sloading = false;
        });
    },
 // 监听下拉框切换
 changePro(name) {
   this.queryType = 1;
   this.pageNum = 1;
   this.left.pageNum = 1; // 需要重置
   this.left.projectName = name;
   this.getTableData();
   this.getOptionList();
 },
 // 获取下拉框数据
  getOptionList(name) {
    this.selectList = []; // 需要清空
    this.sloading = true;
    this.searchData = {
      pageNo: this.left.pageNum,
      pageSize: this.left.pageSize,
      projectName: name || ''
    };
    listProject(this.searchData)
      .then(res => {
        this.sloading = false;
        this.selectList = res.data.records || [];
        this.left.totalPage = res.data.pages || 1;
      })
      .finally(() => {
        this.sloading = false;
      });
  },

以上,因为我的场景还需要远程搜索,所以我把remote方法也贴上了,不需要的可自行删减
希望记录的问题能帮助到你!
end~


http://www.kler.cn/a/149425.html

相关文章:

  • 基于Python的网上银行综合管理系统
  • 华为大变革?仓颉编程语言会代替ArkTS吗?
  • 比ChatGPT更酷的AI工具
  • CSS多列布局:打破传统布局的束缚
  • WebSocket和HTTP协议的性能比较与选择
  • jmeter常用配置元件介绍总结之后置处理器
  • 插入或更新学生信息的 SQL 语句
  • 【问题解决!】OSError: [WinError 1455] 页面文件太小,无法完成操作。Error loading “c:\Anaconda3\lib
  • 在Windows WSL (Linux的Windows子系统)上运行的Ubuntu如何更改主机名
  • 5W2H分析法
  • git分支拉取时,提示冲突
  • SAP_ABAP_基础编程_DESCRIBE FIELD_获取数据对象的属性
  • 2.ORB-SLAM3中如何从二进制文件中加载多地图、关键帧、地图点等数据结构
  • Leetcode 1727. 具有重排的最大子矩阵
  • RPC之GRPC:什么是GRPC、GRPC的优缺点、GRPC使用场景
  • web:NewsCenter
  • 芯片设计中的DFX
  • skywalking告警UI界面有告警信息,webhook接口没有回调,400错误
  • 【100个Cocos实例】完蛋,你看我在刮刮乐中刮到了什么?
  • 【Java基础】-- Java包(package)命名规范
  • 选择更灵活的设计工具:SOLIDWORKS 软件网络版与单机版的比较
  • [C++][原创]VSCode C++怎么让运行的时候弹出cmd窗口,而不是在VSCode调试输出
  • Rust之构建命令行程序(一):接受命令行参数
  • 算法之插入排序及希尔排序(C语言版)
  • C++ day42背包理论基础01 + 滚动数组
  • source: command not found错误的解决方法