微信小程序下拉上拉分页功能实现

js

//index.js
const config = require('../../utils/config.js')
//获取应用实例
const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    pageNum:1,
    pageSize:30,
    hasMoreData: true,
    contentlist: [],
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    var userInfo = wx.getStorageSync(config.USERINFO);
    if (userInfo!=null) {
      this.setData({
        userInfo: userInfo,
        hasUserInfo: true
      })
      //请求和渲染数据
      // 页面初始化 options为页面跳转所带来的参数
      var that = this
     that.getContentInfo('正在加载数据...')
      

    } else  {
      wx.redirectTo({
        url: '../login/login',
      })
    } 
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    
  },
  
  getContentInfo: function (message) {
    wx.showLoading({
      title: message,
    })
    var sessionKey = wx.getStorageSync(config.TOKEN_KEY);
    console.log(sessionKey);
    var that = this;
    wx.request({
      url: config.getFullurl("/getContentList"),
      method: "POST",
      data: {
        pageNum: that.data.pageNum,
        pageSize:that.data.pageSize
      },
      header: {
        'content-type': 'application/x-www-form-urlencoded',
        'WX_TOKEN': sessionKey
      },
      success: function (res) {
        var contentlistTem = that.data.contentlist;
        if(res.data.status==200){
          if (that.data.pageNum == 1) {
            contentlistTem = []
          }
          var contentlist = res.data.data.pageData;
          if (that.data.pageNum >= res.data.data.pageInfo.pageCount){
            that.setData({
              contentlist: contentlistTem.concat(contentlist),
              hasMoreData: false
            })
          }else{
            that.setData({
              contentlist: contentlistTem.concat(contentlist),
              hasMoreData: true,
              pageNum: that.data.pageNum + 1
            })
          }

        }else{
          wx.showToast({
            title: res.data.msg,
            success:function(){
              wx.redirectTo({
                url: '../login/login',
              })
            }
          })
        }


      },
      fail:function(){
        wx.showToast({
          title: '加载数据失败',
          icon: none
        })
      },
      complete:function(){
        wx.hideLoading();
        // complete
        wx.hideNavigationBarLoading() //完成停止加载
        wx.stopPullDownRefresh() //停止下拉刷新
      }
    })
  },
  /**
 * 页面相关事件处理函数--监听用户下拉动作
 */
  onPullDownRefresh: function () {
    console.log('下拉');
    wx.showNavigationBarLoading() //在标题栏中显示加载
    this.data.pageNum = 1
    this.getContentInfo('正在刷新数据')
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    if (this.data.hasMoreData) {
      this.getContentInfo('加载更多数据')
    } else {
      wx.showToast({
        title: '没有更多数据',
      })
    }
  },
  suo: function (e) {
    wx.navigateTo({
      url: '../search/search',
    })
  },
})

wxml

<!--index.wxml-->
<view class="container">
  <view class='page_row' bindtap="suo">
    <view class="search">
      <view class="df search_arr">
        <icon class="searchcion" size='20' type='search'></icon>
        <input class="" disabled placeholder="搜索" value="{{searchValue}}"/>
      </view>
    </view>
    <!-- <view class='sousuo'>搜索</view> -->
  </view>
  <!-- <view class="userinfo">
      <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
      <text class="userinfo-nickname">{{userInfo.nickName}}</text>
  </view> -->
  <!-- <block wx:for="{{contentlist}}" wx:for-item="item" wx:key="content_id" >
  <navigator url="/pages/detail/detail?contentId={{item.content_id}}">
   <view> {{item.content_id+"---"+item.title}} </view>
   </navigator>
   </block>-->
</view> 

<view class="list" wx:for="{{contentlist}}" wx:for-item="item" wx:key="content_id" >
<navigator url="/pages/detail/detail?contentId={{item.content_id}}">
     <view class="list-item list-item-middle">
       <view class="f-b f-black">{{item.content_id}}</view>
        <view class="f-gray">{{item.title}}</view>
    </view>
   <view class="list-item list-item-right">
      <view class="f-gray f30"> {{item.release_date}}</view>
    
    </view>
    </navigator>
</view>

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
微信小程序上拉加载分页查询可以通过使用小程序原生组件 `scroll-view` 和 `onReachBottom` 事件来实现。 首先,在 `wxml` 中使用 `scroll-view` 组件来实现滚动条,并使用 `wx:for` 绑定数据列表: ```html <scroll-view scroll-y="true" bindscrolltolower="onReachBottom"> <view wx:for="{{list}}" wx:key="id"> <!-- 展示数据 --> </view> </scroll-view> ``` 然后,在 `js` 中监听 `onReachBottom` 事件,在触发事件时,向后端请求下一页数据,并将新数据与已有数据合并: ```javascript Page({ data: { list: [], // 已有数据列表 page: 1, // 当前页数 pageSize: 10 // 每页数据量 }, onReachBottom() { wx.showLoading({ title: '加载中', mask: true }) // 请求下一页数据 api.getList(this.data.page + 1, this.data.pageSize).then(res => { wx.hideLoading() const newList = res.data.list if (newList.length) { // 如果有新数据 this.setData({ list: [...this.data.list, ...newList], // 合并数据 page: this.data.page + 1 // 更新页数 }) } else { // 如果没有新数据,说明已经加载完毕 wx.showToast({ title: '已经到底了', icon: 'none' }) } }).catch(() => { wx.hideLoading() wx.showToast({ title: '加载失败,请重试', icon: 'none' }) }) } }) ``` 这样就可以实现微信小程序上拉加载分页查询了。需要注意的是,在请求数据时需要显示加载提示,避免用户误以为程序出现了问题。同时,如果没有新数据,需要提示用户已经到底了,避免用户不必要的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值