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

大数据量实现滚动分页-vue3+element-plus实现方式

1.背景:分页是处理大数据量的一种常见方式,一般有页码分页、滚动分页的实现方式,表格页面分页非常常见,下面是一个列表或者表格的滚动分页。
2.话不多说,上代码:
(1)解题思路:首先,我采用了 element plus 上的v-infinite-scroll 属性(无限滚动),在滚动时请求分页接口来获取数据;其次,每次请求后的数据都要拼接起来,最后,处理每次滚动都只请求一次接口,使用了nextTick(提高性能,减少不必要的计算和渲染,确保DOM更新完成后执行)

页面代码

<divref="scrollContainer"class="container"id="Content"v-infinite-scroll="handleScroll"><el-row><el-colv-for="(item, index) in allChartList"class="pb-10 pr-4":key="index"><div class="chart-card"><span>{{ item.tagName }}</span><span>{{ item.tagValue }}{{ item.unitName }}</span>...</div></el-col><p v-if="loading">Loading...</p></el-row><script setup lang="ts">
import { ref, computed, nextTick } from "vue";
const allChartList = ref<any>([]);
const loading = ref<boolean>(false);
const pageSize = ref<number>(16);
const pageNo = ref<number>(1);
const totals = ref<number>(0);
const totalPage = computed(() => Math.ceil(totals.value / pageSize.value)); // 计算出你的页码 防止无限滚动
const getData = async () => {try {const result:any = await 自己的API({pageSize: pageSize.value,pageNo: pageNo.value,});if (result.code === "0") {if (result.data) {totals.value = result.data.total;const newData = result.data.list || []allChartList.value = [...allChartList.value, ...newData];}} else {ElMessage.error(result.msg || "查询失败");}} catch (error) {loading.value = false;}
};
// 处理滚动事件
const handleScroll = () => {const scrollTop =document.documentElement.scrollTop || document.body.scrollTop;const clientHeight = document.documentElement.clientHeight;const scrollHeight = document.documentElement.scrollHeight;if (scrollTop + clientHeight >= scrollHeight -10 &&pageNo.value < totalPage.value) { // 这里 需要把当前页面与我们数据的最大页码做比较 避免无限滚动loading.value = true;nextTick(() => { // 这一步重要!!它可以减少不必要的请求与渲染,确保请求的顺序,否则你滑动时可能一次性会请求好几次API这样数据就容易错乱pageNo.value += 1;getData(); loading.value = false;});} else {loading.value = false;}
};
</script>

效果如图:

20240820-142332


http://www.mrgr.cn/news/2418.html

相关文章:

  • 后端Java秋招面试中的自我介绍需要说什么?
  • nginx核心配置示例
  • Go语言基础--switch
  • 第3章处理机调度与死锁
  • 树莓派开发笔记09-树莓派的UDP通信实验
  • 【人工智能】Transformers之Pipeline(十一):零样本图片分类(zero-shot-image-classification)
  • 内网拓扑可视化及管控技术
  • TypeScript学习笔记1---认识ts与js的异同、ts的所有数据类型详解
  • .Net插件开发开源框架
  • WPF学习(8) --Windows API函数的使用
  • 探索 HarmonyOS 的层叠布局:灵活的 Stack 容器
  • 原神4.8版本抽到角色和重点培养数据表
  • 高性能企业WEB服务器
  • 水利机械5G智能制造工厂物联数字孪生平台,推进制造业数字化转型
  • OpenCV4特征匹配
  • 快速上手 iOS Protocol Buffer
  • Xshell 连接服务器
  • 人工智能将原本需要数月的镜头设计工作缩短为一天
  • JVM(Java虚拟机) - 深入了解Java中的GC命令:如何优化垃圾回收
  • 【安装】通过VirtualBox结合Vagrant来安装虚拟机