微信小程序实现滚动分页

手机端的话 我们一般不会像PC端那样分页 因为屏幕本身空间就不是很大
所以 一般需求都会选择滚动分页这一解决方案

例如 我在项目根目录 下创建了一个 api文件夹 专门用于调用后台的Api接口
下面创建了一个bookApi.js
然后 其中写了一个getBookList 接收两个参数 当前是第几页 page 一页展示多少条 pageSize
分页查询后端数据
那么 我们前台 Page使用它 就可以
js参考代码如下

import { getBookList } from "../../api/bookApi";
Page({
  data: {
    pageData: {
      page: 1,
      pageSize: 5,
      total: 0
    },
    bookList: [],
		loading: false,
    distance: 0
  },
  onLoad() {
    this.setData({
      pageData: {
        page: 1,
        pageSize: 5,
        total: 0
      }
    })
    this.getUserProfile();
  },
  bindscrolltolower(){
    const { pageData,total } = this.data;
    if((pageData.page * pageData.pageSize) <= total){
      pageData.page += 1;
      this.setData({pageData: pageData})
      this.getUserProfile();
    }else{
      wx.showToast({
        title: '没有更多数据了',
        icon: 'success',
        duration: 2000
      });
    }
  },
  getUserProfile() {
    this.setData({loading: true})
    getBookList(this.data.pageData.page, this.data.pageData.pageSize).then(res=>{
      if(res.state == 200) {
          this.setData({
            bookList: [...this.data.bookList,...res.data.records],
            total: res.data.total,
            loading: false
          })
      }else{
        wx.showToast({
          title: '服务器错误',
          icon: 'success',
          duration: 2000
        });
      }
    }).catch(err => {
      wx.showToast({
        title: '服务器错误',
        icon: 'success',
        duration: 2000
      });
    });
  }
})

这里 我们 引入了 api下的bookApi.js中的getBookList
然后 我们在data中控制了 pageData 存储当前页 页条数 和 数量
为了防止重复请求 我们定义了loading
然后 我们定义getUserProfile 调用getBookList 发送请求
然后在 onLoad 第一个生命周期中 将pageData数据还原一下 然后调用getUserProfile第一次请求

然后 bindscrolltolower 函数在界面上有联动
我们 wxml 参考代码如下

<!--index.wxml-->
<view class="container">
  <scroll-view
    wx:if = "{{ !loading }}"
    scroll-y='true'
    scroll-top = "{{ distance }}"
    style='height: 50vh;'
    bindscrolltolower="bindscrolltolower">
      <view
        wx:for = "{{bookList}}"
        wx:for-index="i"
        wx:for-item="item"
        wx:key = "id"
        class="management"
      >
          {{ item.name }}
      </view>
  </scroll-view>
  <view wx:else>正在加载</view>
</view>

滚动分页 首先 给scroll-view 标签 style控制他的高度 因为 没有高度滚动个什么嘛 是不是
然后我们 用 wx:for 循环变量你bookList 每个节点展示 name 用每个节点的id做元素key
bindscrolltolower可以监听scroll-view滚动到底
然后 就会触发 我们在js中写的bindscrolltolower
然后wxss 参考代码如下

.management{
    width: 100vw;
    height: 40%;
    border-bottom: 1px solid black;
}

然后 我们运行代码
在这里插入图片描述
也是没有任何问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值