vue实现滚动条滑动到底部分页调取后端接口加载数据

devtools/2024/11/27 15:18:06/

一、案例效果

在这里插入图片描述

二、前提条件

接口返回数据
在这里插入图片描述

三、案例代码

子组件

const $emit = defineEmits(['cloneItem', 'updateList']);const props = defineProps({rightList: {type: Array,},chartTableData: {type: Array as () => ChartListType[],},deleteChartInfo: {type: Object,},chartPageInfo: {type: Object,},
});const isLoading = ref(false);
const cardList = ref<any>([]);
const page = ref(1);
const chartPageDetail = ref<any>({});const hasMoreData = ref(true); // 添加标志位const loadMoreData = async () => {if (isLoading.value) return;isLoading.value = true;// 模拟异步加载数据setTimeout(async () => {page.value++;await $emit('updateList', { pageNum: page.value, pageSize: 10 });if (page.value >= chartPageDetail.value.totalPage) {hasMoreData.value = false; // 更新标志位isLoading.value = false;return;}isLoading.value = false;// 确保滚动条与底部保持一定距离const drawerContent = document.querySelector('.drawer-content');if (drawerContent) {drawerContent.scrollTop = drawerContent.scrollHeight - drawerContent.clientHeight - 100;}}, 1000);
};const handleScroll = () => {const drawerContent = document.querySelector('.drawer-content');if (drawerContent) {const { scrollTop, scrollHeight, clientHeight } = drawerContent;if (scrollTop + clientHeight >= scrollHeight - 50 && !isLoading.value && hasMoreData.value) {loadMoreData();}}
};onMounted(() => {const drawerContent = document.querySelector('.drawer-content');if (drawerContent) {drawerContent.addEventListener('scroll', handleScroll);}
});onBeforeUnmount(() => {const drawerContent = document.querySelector('.drawer-content');if (drawerContent) {drawerContent.removeEventListener('scroll', handleScroll);}
});watch(() => props.chartTableData,() => {const tableData = JSON.parse(JSON.stringify(props.chartTableData));cardList.value = [...cardList.value, ...tableData];console.log('76-- cardList.value', cardList.value);},{ immediate: true, deep: true },
);watch(() => props.chartPageInfo,() => {if (props.chartPageInfo) {chartPageDetail.value = { ...props.chartPageInfo };}},{ immediate: true, deep: true },
);

父组件

  <DrawerContent:rightList="rightList":chartTableData="chartTableData":chartPageInfo="chartPageInfo":deleteChartInfo="deleteChartInfo"@updateList="updateChartList"/>const chartPageInfo = ref({});/*** 查询图表列表*/
const getChartList = async (paramsVal?: { pageNum: number; pageSize: number }) => {const params = paramsVal? { ...paramsVal }: {pageNum: 1,pageSize: 10,};const res = await net.strategyManageApi.getChartListApi({ ...params });if (res.data.code === 0) {chartTableData.value = res.data?.data?.data || [];console.log('151---chartTableData', chartTableData.value, '151----rightList', rightList.value);chartTableData.value = formatChartTableData(chartTableData.value, rightList.value);chartPageInfo.value = {pageSize: res.data?.data.pageSize,totalNum: res.data?.data.totalNum,totalPage: res.data?.data.totalPage,};}
};const updateChartList = async (params: { pageNum: number; pageSize: number }) => {await getChartList(params);
};/*** 格式化左侧图表列表-添加isAdd属性* @param chartTableData: 左侧图表列表* @param rightList: 右侧回显列吧* @returns*/
export const formatChartTableData = (chartTableData: any, rightList: any) => {rightList.forEach((rightItem: any) => {chartTableData.forEach((tableItem: any) => {if (rightItem.id === tableItem.id) {tableItem.isAdd = true;}});});return chartTableData;
};

http://www.ppmy.cn/devtools/137427.html

相关文章

LeetCode 3206.交替组 I:遍历

【LetMeFly】3206.交替组 I&#xff1a;遍历 力扣题目链接&#xff1a;https://leetcode.cn/problems/alternating-groups-i/ 给你一个整数数组 colors &#xff0c;它表示一个由红色和蓝色瓷砖组成的环&#xff0c;第 i 块瓷砖的颜色为 colors[i] &#xff1a; colors[i] …

线上+线下≠新零售,6大互通诠释新零售的核心要点-亿发

新零售&#xff0c;这个词汇在近年来频繁出现在我们的视野中&#xff0c;它不仅仅是线上与线下的简单相加&#xff0c;而是一场深刻的商业变革。本文将通过6大互通的核心要点&#xff0c;为您揭示新零售的真正内涵。 1. 商品的互联互通 新零售模式下&#xff0c;商品的互联互…

Redis中HGETALL和ZRANGE命令

Redis中HGETALL和ZRANGE命令 简单来说 HGETALL 命令用于返回哈希表中&#xff0c;所有的字段和值。 ZRANGE 命令用于返回有序集中&#xff0c;指定区间内的成员。 HGETALL 在 Redis 中&#xff0c;HGETALL 是一个用于操作哈希&#xff08;Hash&#xff09;数据类型的命令&…

Qt SQL模块概述

Qt SQL支持的数据库 要在项目中使用 Qt SQL 模块&#xff0c;需要在项目配置文件中添加下面一条设置语句&#xff1a; Qt sql在头文件或源文件中使用 Qt SQL 模块中的类&#xff0c;可以使用包含语句&#xff1a; #include <QtSql>这样会将某个 Qt SQL 模块中的所有类…

远程控制软件:探究云计算和人工智能的融合

在数字化时代&#xff0c;远程控制工具已成为我们工作与生活的重要部分。用户能够通过网络远程操作和管理另一台计算机&#xff0c;极大地提升了工作效率和便捷性。随着人工智能&#xff08;AI&#xff09;和云计算技术的飞速发展&#xff0c;远程控制工具也迎来了新的发展机遇…

yolov11剪枝

思路&#xff1a;yolov11中的C3k2与yolov8的c2f的不同&#xff0c;所以与之前yolov8剪枝有稍许不同&#xff1b; 后续&#xff1a;会将剪枝流程写全&#xff0c;以及增加蒸馏、注意力、改loss&#xff1b; 注意&#xff1a; 1.在代码105行修改pruning.get_threshold(yolo.mo…

2024小迪安全基础入门第七课

目录 一、抓包技术-Web&App&小程序&PC-扶墙双层 二、 抓包技术-Web&App&小程序&PC-项目联动 三、抓包技术-Web&App&小程序&PC-全局协议 一、抓包技术-Web&App&小程序&PC-扶墙双层 Wireshark&#xff1a; https://www.wir…

业务架构、数据架构、应用架构和技术架构

TOGAF(The Open Group Architecture Framework)是一个广泛应用的企业架构框架&#xff0c;旨在帮助组织高效地进行架构设计和管理。 TOGAF 的核心就是由我们熟知的四大架构领域组成:业务架构、数据架构、应用架构和技术架构。 企业数字化架构设计中的最常见要素是4A 架构。 4…