uniapp-避免请求数据未全部加载完成

博客提到使用v-if来控制页面显示,当指定值未加载完成时,页面不会显示,这是前端开发中常见的页面加载控制方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

添加v-if 如果此值没加载完成则不显示页面

UniApp 中实现触底加载更多数据的功能,通常涉及以下几个关键步骤: ### ### 1. 分页请求数据 分页加载是实现触底加载的基础。每次请求时,传递当前页面编号(如 `page=1`)和每页数据量(如 `pageSize=10`),后端根据这两个参数返回对应的数据片段。随着用户滚动到底部,页面编号递增,从而获取下一页的数据[^1]。 ```javascript // 示例:定义分页参数 data() { return { page: 1, pageSize: 10, hasMoreData: true, newsArr: [] } } ``` ### ### 2. 监听页面滚动事件 UniApp 提供了监听页面滚动的方法 `onPageScroll`,通过此方法可以检测用户是否滚动到页面底部。当满足条件时,触发加载下一页数据的逻辑[^1]。 ```javascript onPageScroll() { uni.createSelectorQuery().select('.scroll-bottom').boundingClientRect(res => { if (res && res.top < uni.getSystemInfoSync().windowHeight + 100) { this.loadMoreData(); } }).exec(); } ``` ### ### 3. 加载更多数据 定义 `loadMoreData()` 方法,在该方法中执行新的分页请求,并将新数据拼接到现有数据列表中。注意避免重复请求或无效请求,例如当有更多数据时应停止加载[^2]。 ```javascript methods: { async loadMoreData() { if (!this.hasMoreData) return; const newData = await this.fetchData(this.page + 1, this.pageSize); if (newData.length === 0) { this.hasMoreData = false; // 有更多数据 } else { this.newsArr = [...this.newsArr, ...newData]; this.page += 1; } }, fetchData(page, pageSize) { // 这里模拟网络请求 return new Promise(resolve => { setTimeout(() => { resolve(Array.from({ length: pageSize }, (_, i) => `新闻条目 ${page * pageSize + i}`)); }, 500); }); } } ``` ### ### 4. 页面重置与数据初始化 当用户进行筛选或跳转操作时,需要重置分页参数(如 `page=1`),并清空已有数据数组以重新加载初始数据[^2]。 ```javascript resetAndLoadData() { this.page = 1; this.hasMoreData = true; this.newsArr = []; this.loadMoreData(); } ``` ### ### 5. 用户体验优化 - **防抖机制**:防止短时间内多次触发触底事件。 - **加载提示**:在加载过程中显示“正在加载...”提示。 - **无更多数据提示**:当 `hasMoreData=false` 时显示“有更多数据”。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值