持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
上拉加载更多
我们之前已经讲了下拉刷新、上拉加载。我们根据之前学习过的课程写就可以了
要想实现上拉加载更多,就要监听onReachBottom事件,让当前页 +1,再次请求商品列表数据,把数据追加到 当前 goods 数据中即可
为了更好的展示数据,我们修改 getGoodsList方法,传入参数 query 来搜索关键词"宝宝零食",pagesize来限定每页加载10条数据,pagenum来限定请求第几页的数据
在 data 中增加变量 curPage 来方便修改页码
我们在页面增加一个 view,在数据加载完成时展示“我是有底线的”,用变量 flag 来表示展示与否,开始为 false,不展示。当数据加载完成时,修改为 true,展示
如何判断数据是否加载完成呢?正常情况下会返回总页数,用总页数和当前页数作比较即可得出是否加载完成,由于我们的测试数据没有返回总页数,我们可以换一种方式判断,由于我们每页加载10条数据,同时也知道当前页码,所以可以根据当前全部 goods 数据的长度和 当前页面*10 作比较即可
我们来看下整个过程:当上拉页面触底时,onReachBottom被调用,判断数据是否加载完成,如果加载完成,把 flag 置为 true,展示“我是有底线的”,return,不走下面的加载数据代码;如果没有加载完成,则把当前页 +1,同时调用获取数据列表方法即可
<template>
<view>
<goods-list :goods='goods'></goods-list>
<view class="isOver" v-if="flag">-----我是有底线的-----</view>
</view>
</template>
<script>
import goodsList from '../../components/goods-list/goods-list.vue'
export default {
data() {
return {
goods:[],
curPage:1,
flag:false
}
},
onLoad() {
this.getGoodsList()
},
components:{
'goods-list':goodsList
},
methods: {
async getGoodsList(){
const res = await this.$myRequest({
url:'/api/public/v1/goods/search',
data:{
query:'宝宝零食',
pagesize:10,
pagenum:this.curPage,
}
})
this.goods = [...this.goods,...res.data.message.goods]
}
},
onReachBottom() {
if(this.goods.length < this.curPage*10) return this.flag = true
this.curPage++
this.getGoodsList()
}
}
</script>
<style lang="scss">
.goods_list{
background: #eee;
}
.isOver{
width: 100%;
height: 50rpx;
line-height: 50rpx;
background: #eee;
text-align: center;
font-size: 28rpx;
}
</style>
运行程序:
下拉刷新
要实现下拉刷新,首先需要在 pages.json 中增加 enablePullDownRefresh
{
"path" : "pages/goods/goods",
"style" :
{
"navigationBarTitleText": "商品列表",
"enablePullDownRefresh": true
}
}
然后修改 goods.vue
......
<script>
......
export default {
......
methods: {
async getGoodsList(callback) {
......
this.goods = [...this.goods, ...res.data.message.goods]
callback && callback()
}
},
......
onPullDownRefresh() {
this.curPage = 1
this.flag = false
this.goods = []
setTimeout(()=>{
this.getGoodsList(()=>{
uni.stopPullDownRefresh()
})
},1000)
}
}
</script>
......
运行程序: