1. 程式人生 > >微信小程式 下拉重新整理/上拉載入更多 (上拉載入更多怎麼實現)

微信小程式 下拉重新整理/上拉載入更多 (上拉載入更多怎麼實現)

實現原理:
1、下拉重新整理:由於小程式資料是實時渲染的。我們把data{}內的資料清空重新載入即可實現下拉重新整理。
2、上拉載入更多(頁面上拉觸底事件):新獲取的資料追加到data{}內的原資料即可。由於小程式資料是實時渲染,小程式在保持原資料顯示不變的基礎上,自動追加渲染顯示新資料。

注意(小程式官方有說明):
1、上拉載入更多 不要用scroll-view,用普通的view即可。
2、下拉重新整理需要在 當前頁面.json 裡配置

 {
   "enablePullDownRefresh": true 
}

3、page()屬性裡有兩個屬性是關於頁面下拉重新整理 和 上拉載入更多的:

onPullDownRefresh Function 頁面相關事件處理函式–監聽使用者下拉動作
onReachBottom Function 頁面上拉觸底事件的處理函式

文章列表頁的demo程式碼:

index.wxml

<!--pages/home/index.wxml-->
<view class='container' wx:for="{{articles}}">
   <!-- 文章列表  -->
   <view  bindtap="onArticle"  data-aid="{{item.id}}">
<view class='a-title '>
{{item.title}}</view> <image class='a-thumb' src="{{item.thumb}}" mode="widthFix"></image> </view> </view>

index.js

//pages/home/index.js
var page=0;//分頁標識,第幾次下拉,使用者傳給後臺獲取新的下拉資料
Page({
   data: {  
      articles: [],//文章列表陣列
   },

   // 頁面載入
onLoad: function () { this.clearCache();//清本頁快取 this.getArticles(0);//第一次載入資料 }, // 下拉重新整理 onPullDownRefresh: function () { this.clearCache(); this.getArticles(0);//第一次載入資料 }, // 頁面上拉觸底事件(上拉載入更多) onReachBottom: function () { this.getArticles(page);//後臺獲取新資料並追加渲染 }, // 清快取 clearCache:function(){ page = 0;//分頁標識歸零 this.setData({ articles: [] //文章列表陣列清空 }); }, /**************** 介面點選 *****************/ // 文章點選跳轉詳情頁 onArticle:function(){ //業務邏輯 }, /**************** 網路請求 *****************/ /** * 獲取文章列表 * @param {int} pg 分頁標識 預設0 */ getArticles: function (pg) { //設定預設值 pg = pg ? pg : 0; var that = this; var apiUrl = 'http://www.zhipur.com/Api/Article/getArticles';//文章列表介面地址 var postData = { page: pg,//分頁標識 app_version: 1.2,//當前版本,後臺根據版本不同給出不同的資料格式 } wx.request({ url: apiUrl, data: postData, method: 'POST', header: { 'content-type': 'application/x-www-form-urlencoded' }, success: function (res) { if (res.data.status == 1) {//成功 var tmpArr = that.data.articles; // 這一步實現了上拉載入更多 tmpArr.push.apply(tmpArr,res.data.data); that.setData({ articles: tmpArr }) page++; } else {//失敗 console.log(res.data.info); } }, fail: function (e) { console.log(e); } }) }, })