如何在uniapp中实现列表分页功能

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分页插件实现列表分页功能的方法。本方案具有易上手、易维护、易扩展等优点,可以方便地应用于实际项目中。希望大家能根据本文的内容,不断探索和应用更多的优秀的分页插件和开发方案,为客户带来更加优质的用户体验!