小程序列表下拉刷新和加载更多

配置

在小程序的app.json中,检查window项目中是否已经加入了"enablePullDownRefresh": true,这个用来开启下拉刷新

bash 复制代码
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "洛塔",
    "navigationBarTextStyle": "black",
    "enablePullDownRefresh": true
  },

样式

直接引入weui

bash 复制代码
@import "/pages/style/weui.wxss";

布局

上方两个查询条件和一个按钮,下方显示列表

bash 复制代码
<view class="container">
  <view class="page-body">
    <form catchsubmit="formSubmit">
      <view class="weui-cells weui-cells_after-title">
        <view class="weui-cell weui-cell_input">
          <input name="shipName" class="weui-input" auto-focus placeholder="请输入船名,中英文均可"/>
        </view>
        <view class="weui-cell weui-cell_input">
          <input name="voyage" class="weui-input" placeholder="请输入航次号"/>
        </view>
    </view>
    <button type="primary" formType="submit" style="width:100%;margin-top: 10px;">查询船动态</button>
    </form>

    <view style="margin-top:10px; padding:10px; background:#eeeeee;" wx:for="{{list}}" wx:key="key">
    <view>
      <text style="font-size: 14px;"> 英文船名: {{item.shipNameEn}}</text>
    </view>
    <view>
      <text style="font-size: 14px;"> 中文船名: {{item.shipNameCn}}</text>
    </view>
    <view>
      <text style="font-size: 14px;"> 航次: {{item.voyage}}</text>
    </view>
    <view>
      <text style="font-size: 14px;"> 码头: {{item.wharf}}</text>
    </view>
    <view>
      <text style="font-size: 14px;"> 类型: {{item.type}}</text>
    </view>
    <view>
      <text style="font-size: 14px;"> 开港时间: {{item.startTime}}</text>
    </view>
    <view>
      <text style="font-size: 14px;"> 截关时间: {{item.endTime}}</text>
    </view>


    </view>

  </view>
</view>

逻辑

data中定义几个参数,分别对应请求参数和返回结果。

bash 复制代码
  data: {
    page:1,
    total:0,
    shipName:'',
    voyage:'',
    list:[]
  },

定义一个公共的请求方法,用来调用接口,加载更多、下来刷新、点击查询等,都调用这个方法

bash 复制代码
    getListInfo:function() {
      var url = 'https://eladmin.luotayixing.com/api/yzt/time?pageNumber=' + this.data.page +'&pageSize=10&shipName=' + this.data.shipName + '&voyage=' + this.data.voyage;
      var that = this;
      wx.showLoading({
        title: '加载中',
      })
      wx.request({
        url: url,
        success (res) {
          wx.hideLoading();
          if(that.data.page == 1) {
            that.setData({
              list: res.data.data.data
            })
          } else {
            var itemList = that.data.list;
            that.setData({
              list: itemList.concat(res.data.data.data)
            })
          } 
          that.setData({page: that.data.page+1});
          that.setData({total:res.data.data.total});
        },
        fail: function (res) {
          wx.hideLoading()
        }
      })
    },

点击查询按钮,直接调用上面的方法

bash 复制代码
    formSubmit(e) {
      this.setData({
        shipName:e.detail.value.shipName,
        voyage:e.detail.value.voyage,
        page:1
      });
      this.getListInfo();
    },

用户下拉刷新,需要把页码设置成1,然后调用方法

bash 复制代码
    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {
      this.setData({page:1});
      this.getListInfo();
    },

加载更多,需要判断下是不是还有数据。

bash 复制代码
    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {
      if (this.data.list.length != this.total) {
        this.getListInfo();
      } else {
        wx.showToast({
          title: '没有更多数据',
        })
      }
    },

以上就是全部逻辑了,完整的js文件如下:

bash 复制代码
Component({

  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {
    page:1,
    total:0,
    shipName:'',
    voyage:'',
    list:[]
  },

  /**
   * 组件的方法列表
   */
  methods: {
    getListInfo:function() {
      var url = 'https://eladmin.luotayixing.com/api/yzt/time?pageNumber=' + this.data.page +'&pageSize=10&shipName=' + this.data.shipName + '&voyage=' + this.data.voyage;
      var that = this;
      wx.showLoading({
        title: '加载中',
      })
      wx.request({
        url: url,
        success (res) {
          wx.hideLoading();
          if(that.data.page == 1) {
            that.setData({
              list: res.data.data.data
            })
          } else {
            var itemList = that.data.list;
            that.setData({
              list: itemList.concat(res.data.data.data)
            })
          } 
          that.setData({page: that.data.page+1});
          that.setData({total:res.data.data.total});
        },
        fail: function (res) {
          wx.hideLoading()
        }
      })
    },
    formSubmit(e) {
      this.setData({
        shipName:e.detail.value.shipName,
        voyage:e.detail.value.voyage,
        page:1
      });
      this.getListInfo();
    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {
      this.setData({page:1});
      this.getListInfo();
    },
    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {
      if (this.data.list.length != this.total) {
        this.getListInfo();
      } else {
        wx.showToast({
          title: '没有更多数据',
        })
      }
    },
    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
  }
})
相关推荐
超级新零售11 小时前
服装订货会数字化:商品版本、订单状态与后续配发数据如何衔接?
大数据·小程序·企业微信
xiezhr15 小时前
我用workBuddy开发了自己的第一个小程序并成功上线了
ai·小程序·ai agent·workbuddy
sinat_267611911 天前
用 AI 开发微信小程序(八):一个极简收纳工具的开发复盘
微信小程序·小程序
李纲明1 天前
微信小程序真机预览白屏或 request 失败:先核 request 合法域名与 TLS,再查体验版与本地缓存
缓存·微信小程序·小程序·小程序开发·devdiy·真机预览·合法域名
klfdgl1 天前
线上商城小程序投入测算,有成熟开发经验服务商的长期收益对比
小程序
一木 之林2 天前
Dify学习笔记 03 · RAG检索增强生成:三代范式、评估与落地(第40-45、55-56集)
笔记·小程序·交互·dify
赵小哥要冲啦2 天前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
河北清兮网络科技2 天前
石家庄做一套企业知识库系统多少钱?2026 报价明细
小程序·短剧app·广告联盟
Ai-_Man2 天前
Coze扣子还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·1024程序员节
微订校园外卖平台3 天前
新手做校园外卖平台:小程序启动顺序与订单链路验收
小程序·外卖系统·本地生活·微订