1. 什么是列表分页功能
在开发网页或是移动端应用中,列表是非常常见的展示方式,如商品列表、新闻列表、好友列表等。在这些列表数量过多的情况下,需要将所有数据一次性展示出来显然是不太合适的,这个时候就需要进行列表分页,即将数据分为若干页进行展示,以此减轻用户的视觉和认知负担。
在uniapp中实现列表分页的方式有多种,本文将重点介绍其中一种基于分页插件的实现方式。
2. 分页插件的安装
2.1. 下载分页插件
在实现分页功能之前,我们需要先选用一个适合的分页插件。这里我们使用的是uni-simple-router提供的分页插件——uni-pagination。您可以在GitHub上找到该插件:https://github.com/SilurianYang/uni-simple-router/tree/master/src/uni-pagination。
下载完相应文件后,可以将其放在项目的components文件夹中。
2.2. 引入分页插件
在需要分页展示的页面中,我们先用import语句引入分页组件:
<template>
<view>
<uni-pagination ... />
</view>
</template>
<script>
import uniPagination from '@/components/uni-pagination/uni-pagination.vue';
export default {
components: {
uniPagination
},
...
}
</script>
现在,我们已经成功引入分页组件。接下来,我们需要进行一些基本配置。
3. 分页插件的基本配置
3.1. 分页参数的设置
在data中设置分页所需要的参数:
<script>
export default {
data() {
return {
// 当前页码
currentPage: 1,
// 每页数据条目数
pageSize: 10,
// 数据总条目数
total: 0,
...
}
},
...
}
</script>
3.2. 分页事件的监听
在methods中添加分页事件监听:
<script>
export default {
...
methods: {
onPageChange(e) {
this.currentPage = e.page;
this.loadList();
},
loadList() {
//TODO: 加载数据,并根据分页参数进行查询
},
...
}
};
</script>
这里,我们通过onPageChange事件来监听分页组件的页码变化,并根据当前页面的数据来加载数据。其中loadList方法可以在适合的位置进行调用,加载对应页码的数据。loadList方法中的TODO注释表示需要根据业务需求进行补充。
3.3. 分页组件的使用
在页面的模板中加入分页组件,并将currentPage、pageSize、total参数分别绑定到组件上:
<template>
<view class="list">
<view v-for="(item, index) in list" :key="index">
...
</view>
<uni-pagination
currentPage="{{currentPage}}"
pageSize="{{pageSize}}"
total="{{total}}"
:showPageSizes="[10, 20]"
:pageSizeOpts="[10, 20]"
@change="onPageChange" />
</view>
</template>
在上述模板中,showPageSizes表示显示的数据条目数数组(可选),pageSizeOpts表示可选的每页条目数(可选),其中的@change为页码变化的监听事件。
4. 分页插件的高级使用
4.1. 指定每页展示数量
通过设置pageSize参数,我们可以指定每页展示的数据条目数:
data() {
return {
// 每页数据条目数
pageSize: 10,
...
}
},
4.2. 默认展示第几页
通过设置currentPage参数,我们可以指定默认展示的页码:
data() {
return {
// 当前页码
currentPage: 1,
...
}
},
4.3. 数据总条目数
通过设置total参数,我们可以指定数据总条目数:
data() {
return {
// 数据总条目数
total: 0,
...
}
},
4.4. 响应式列表展示
通过使用watch属性,我们可以使列表展示随着currentPage参数的变化而实时更新:
watch: {
currentPage: function(val) {
this.loadList();
}
},
4.5. 数据缓存
为了提高用户的体验,降低数据加载的延迟,我们可以使用uniapp提供的数据缓存机制。在loadList方法中,通过uni.getStorage和uni.setStorage方法来实现数据缓存。示例代码如下:
loadList() {
//先从缓存中读取数据
let listFromStorage = uni.getStorageSync('list');
if(listFromStorage) {
this.list = listFromStorage; //将数据赋值给列表展示变量
return; //退出加载方法
}
//没有缓存,则调用接口获取数据
api.getList(this.currentPage, this.pageSize).then((res) => {
this.list = res.list; //将数据赋值给列表展示变量
this.total = res.totalCount; //更新total参数
//将数据缓存到storage中
uni.setStorageSync('list', this.list);
}, (err) => {
console.log(err);
});
}
这里,我们使用了uni.getStorageSync和uni.setStorageSync方法来进行数据缓存。在loadList方法中,先从缓存中读取数据,如果有数据则直接显示;如果没有缓存,则通过接口调用获取数据,并将数据缓存到storage中。
4.6. 错误处理
在数据加载的过程中,可能会出现网络错误、数据为空等情况。这时,可以使用uniapp提供的toast组件提示用户错误信息。示例代码如下:
loadList() {
...
api.getList(this.currentPage, this.pageSize).then((res) => {
this.list = res.list; //将数据赋值给列表展示变量
this.total = res.totalCount; //更新total参数
uni.setStorageSync('list', this.list); //将数据缓存到storage中
}, (err) => {
uni.showToast({
title: '数据加载失败,请检查网络是否通畅!',
icon: 'none'
});
});
}
这里,我们通过uni.showToast方法来实现错误信息的提示。其中,title参数表示提示的文字内容,icon参数表示提示的图标类型(可选参数)。
5. 结语
现在,我们已经学会了使用uni-pagination分页插件实现列表分页功能的方法。本方案具有易上手、易维护、易扩展等优点,可以方便地应用于实际项目中。希望大家能根据本文的内容,不断探索和应用更多的优秀的分页插件和开发方案,为客户带来更加优质的用户体验!