uni-app中有几种方式实现加载和刷新,下面我就分别介绍一下(我是使用的vue3进行开发)
页面实现刷新和加载
1. 首先我们要在配置文件中添加配置项(pages.json)
js
"enablePullDownRefresh": true
配置完就能看到下拉刷新和上拉加载的动作了,具体的逻辑需要自定义完成
2. 在页面中引入两个钩子函数
onReachBottom是上拉加载会触发的钩子函数
(onPullDownRefresh)是下拉刷新触发的钩子函数
js
import { onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app';
3. 自定义实现加载和刷新逻辑
- 下拉刷新
这里需要注意onPullDownRefresh函数与onLoad钩子函数同级
js
onLoad( ()=> {})
onPullDownRefresh(() => {
GetOrderList(); // 获取数据的函数
setTimeout(() => {
//结束下拉刷新
uni.stopPullDownRefresh();
}, 1000);
});
这里的uni.stopPullDownRefresh是关闭下拉刷新动作的
如果你还需要其它的操作,可以去官网找对应的api onPullDownRefresh | uni-app官网 (dcloud.net.cn)
- 上拉加载
上拉加载也就是分页加载,所以我们需要定义分页加载的数据
js
const pageParams = ref({
page: 1,
pageSize: 3,
});
js
onReachBottom(() => {
pageParams.value.page++;
// 这里的逻辑是根据后端放回的数据总数/每页条目数向上取整,然后跟+1后的page作比较
if (pageParams.value.page <= Math.ceil(totalCount.value / pageParams.value.pageSize)) {
GetOrderList(); // 获取自己的数据
} else {
loadmoreStatus.value = 'nomores';
}
});
这样一个简单的上拉刷新和下拉加载就实现了。 但是上拉的时候是没有动画的,这就导致程序比较单一,我在这里使用uView-plus中的u-loadmore组件,大家也可以进行参考。uView-plus 3.0
局部实现刷新和加载
这里我们是使用了scroll-view标签上的属性和方法来实现uni-app官网
- 下拉刷新
- 启用下拉刷新: 添加
refresher-enabled
属性。 - 下拉刷新事件:绑定
@refresherrefresh
事件。 - 添加 下拉刷新状态 标记: 添加
refresher-triggered
属性,用于关闭动画的。 - 下拉刷新事件内部:主要是重新获取数据,当数据获取成功后,主动关闭下拉刷新动画。注意在多个请求的情况下,需要用
Promise.all()
等所有请求都结束了,再关闭动画。
- 上拉加载
- 定义
pageParams
对象,存储分页参数,包括页码page
和每页数据量pageSize
。 - 定义
finish
响应式引用,表示是否已加载完所有数据。 - 滚动触底事件:给
scroll-view
组件绑定@scrolltolower
事件。 - 在事件内部需要判断是否已加载完所有数据,没有结束就继续发送请求,同时页码要累加,获取的数据要追加到原数组后,如果分页已结束,就更新
finish
标记,并提醒用户。
注意:使用竖向滚动时,需要给 <scroll-view>
一个固定高度,通过 css 设置 height;使用横向滚动时,需要给<scroll-view>
添加white-space: nowrap;
样式
只有给scroll-view标签设置固定高度时,才可以实现上拉加载
因为我还没有写完代码,等我写完这部分代码,再回来补充。