写一段uniapp,写一个列表,每页20条数据,向上滑动,分页。
时间: 2023-03-19 11:22:39 浏览: 169
以下是一个简单的Uniapp代码示例,展示如何创建一个分页的列表组件,每页包含20条数据,并能够向上滑动以加载更多数据。
```html
<template>
<view>
<scroll-view class="list" scroll-y="true" :scroll-top="scrollTop" @scrolltolower="loadMore">
<view v-for="(item, index) in listData" :key="index">{{ item }}</view>
<view v-if="loading">加载中...</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
listData: [],
loading: false,
scrollTop: 0,
page: 1,
pageSize: 20,
};
},
mounted() {
this.loadData();
},
methods: {
loadData() {
this.loading = true;
// 模拟异步请求数据
setTimeout(() => {
const start = (this.page - 1) * this.pageSize;
const end = start + this.pageSize;
for (let i = start; i < end; i++) {
this.listData.push(`第 ${i + 1} 条数据`);
}
this.loading = false;
this.page++;
}, 1000);
},
loadMore() {
if (this.loading) return;
this.loadData();
},
},
};
</script>
<style>
.list {
height: 100vh;
}
</style>
```
代码说明:
1. 使用 `scroll-view` 组件创建一个滚动列表,并设置 `scroll-y="true"` 让它能够垂直滚动。
2. 使用 `v-for` 循环渲染 `listData` 数组中的数据,每个数据对应一个 `<view>` 元素,`key` 属性使用 `index`。
3. 添加一个 `<view>` 元素,用于显示正在加载数据的提示信息,它的显示与隐藏使用 `v-if` 控制。
4. 在 `data()` 函数中设置初始数据,包括 `listData` 数组、`loading` 状态、滚动条位置、当前页码和每页数据量等。
5. 在 `mounted()` 钩子函数中调用 `loadData()` 方法,开始加载第一页数据。
6. `loadData()` 方法模拟异步请求数据,将请求到的数据添加到 `listData` 数组中,并将 `loading` 状态设为 `false`,同时将当前页码加一。
7. `loadMore()` 方法用于触发加载更多数据,判断当前是否正在加载数据,若是则直接返回,否则调用 `loadData()` 方法。
8. 在 `<style>` 中设置 `list` 的高度为 `100vh`,让它占满整个页面。
以上是一个简单的分页列表组件示例,可以根据实际需求进行修改和优化。
阅读全文