赞
踩
1.在 pages.json 配置文件,为需要分页的页面配置上拉触底的距离 onReachBottomDistance
2.在 pages/Pagination/index 页面中,声明 onReachBottom 事件处理函数,用来监听页面上拉触底
3.在 getObjList 方法中,当数据请求成功之后,进行新旧数据的拼接处理
4.定义 isLoading 节流阀
5.修改 getObjList 方法,在请求数据前后,分别打开和关闭节流阀
6.在 onReachBottom 触底事件中,根据节流阀的状态来决定是否发起请求
7.判断数据是否加载完毕,修改 onReachBottom 事件处理函数
1.在 pages.json 配置文件中,为需要分页的页面配置下拉刷新效果
2.监听页面的 onPullDownRefresh 事件处理函数
3.修改 getObjList 函数,小程序默认不会关闭下拉,所以需要使用cb进行关闭
<template> <!-- 分页组件 --> <view class="container"> <c-card class="myCard" title="分页测试" v-for="(item, id) in objList" :key="id" > {{ item.age }} </c-card> <u-divider>没有更多了</u-divider> </view> </template> <script lang="ts" setup> import { onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app"; import { onMounted, ref } from "vue"; import cCard from "@/components/common/cCard"; // 分页请求对象 interface IQueryObj { pageNum: number; pageSize: number; } onMounted(() => { getObjList(); }); // 上拉加载 onReachBottom(() => { // 判断是否还有下一页数据 if (queryObj.value.pageNum * queryObj.value.pageSize >= total.value) return console.log("数据加载完毕!"); // 判断是否在请求数据 if (isLoding.value) return; // 页码值自增 queryObj.value.pageNum += 1; // 重新获取列表数据 getObjList(); }); // 下拉刷新 onPullDownRefresh(() => { // 重置数据 queryObj.value.pageNum = 1; total.value = 0; isLoding.value = false; objList.value = []; // 重新发起请求,并手动关闭下拉刷新 getObjList(() => uni.stopPullDownRefresh()); }); const objList = ref<any[]>([]); const total = ref(0); const isLoding = ref(false); const queryObj = ref<IQueryObj>({ pageNum: 1, pageSize: 10, }); // 获取列表数据 const getObjList = (cb?: any) => { uni.showLoading({}); // 打开节流阀 isLoding.value = true; // 发送请求 const temList = mockData(); setTimeout(function () { uni.hideLoading(); }, 1000); // 关闭节流阀 isLoding.value = false; // 是否调用回调函数 cb && cb(); // 拼接新旧数据 objList.value = [...objList.value, ...temList.value]; }; // 模拟数据 const mockData = () => { const temList = ref<any[]>([]); for (let i = 1; i <= 10; i++) { const temObj = ref({ age: objList.value.length + i, }); temList.value = [...temList.value, temObj.value]; } total.value = 100; return temList; }; </script> <style lang="scss" scoped> .container { padding-top: 30rpx; width: 100%; min-height: 100vh; background: $conch-background-color; .myCard { margin: 20rpx auto; } } </style>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。