在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一,遇到问题 在开发微信小程序:【澳买】这个项目的时候,当用户按关键词搜索某个产品的时候,如果搜索结果比较多, 比如100条或者更多,我们不可能也不应该在手机上都给用户显示出来的,这个时候怎么办呢?
二,解决思路 方案很简单,肯定是要用到翻页的功能了,那问题就转化为在微信小程序里面我们如何实现翻页呢? 首先,我们要充分利用手机手指的翻页功能,比如用户下滑翻到屏幕底部,我们开始加载一下屏的数据,直到 加载完所有的搜索结果,我们再在手机屏幕底部提示用户,已经加载完全部产品数据。
三,技术实施 你等的干货来了,请接好: 1. 微信小程序的已经提供了现成的判断是否翻到页面底部回调函数: onReachBottom 我们只需要把我们的操作逻辑代码加入这个回调函数即可: 1 /** 2 * Called when page reach bottom 3 */ 4 onReachBottom: function () { 5 6 if ( self.data.nomoreData ) { 7 this.setData({ 8 showloading: true, 9 loadingMoreTips: '没有更多商品了' 10 }); 11 return; 12 } 13 14 this.setData({ 15 showloading: true, 16 }); 17 18 19 db.collection('pinfo') 20 .where({ 21 cname: db.RegExp({ 22 regexp: this.data.searchname, 23 options: 'i' 24 }) 25 }) 26 .field({ 27 _id: true, 28 images: true, 29 cname: true, 30 bname: true, 31 }).skip(self.data.totalItems) 32 .limit(MAX_PAGE_LIMIT) 33 .get({ 34 success: function (res) { 35 self.setData({ 36 showloading: false, 37 }); 38 if (res.data.length > 0) { 39 self.data.totalItems += res.data.length; 40 let pitems = self.data.items; 41 for (let i in res.data) { 42 let pdata = res.data[i]; 43 pitems.push({ 44 'id': pdata['_id'], 45 'barcode': pdata['_id'], 46 'image': app.globalData.pimage_root + pdata['images'][0], 47 'name': pdata['cname'], 48 'brand_name': pdata['bname'] 49 }); 50 } 51 52 //console.log('update items'); 53 self.setData({ 54 items: pitems 55 }); 56 57 } else { 58 self.data.nomoreData = true; 59 self.setData({ 60 showloading: false, 61 }); 62 } 63 }, 64 fail: function (error) { 65 self.setData({ 66 showloading: false, 67 }); 68 } 69 }); 70 71 },
大家注意到没有,上面的处理逻辑里面用了一个非常重要的变量: self.data.nomoreData // 用来标识数据是否全部加载完毕 初始化的时候 改变量我们赋值是false,在第58行的时候,会判断如果没有数据了,就设置为true了。 page data的 初始化代码如下: 1 /** 2 * Page initial data 3 */ 4 data: { 5 showloading: false, 6 nomoreData: false, 7 searchname: '', 8 totalItems: 0, 9 items: [], 10 loadingResult: '努力加载...', 11 loadingMoreTips: '玩命加载中...' 12 },
|
请发表评论