欢迎光临,了解微信小程序开发,就上易用通!

晓想demo代码分析系列《二》index页面

发布:2018-02-07 11:11浏览: 来源:网络 作者:cola

 
由于语音播放问题没有解决,所以在这里不涉及这方面的分析!

这一小节我们来分析首页这个页面,也就是index页面。

index.js

首先我们引用了两个文件,api.js 和 util.js,这个没什么好说的了。

var util = require('../../utils/util.js')
var Api = require('../../utils/api.js')

然后我们看 Page 中 data 的部分。

  • token用来存储从 本地或者远程获取到的token值

  • list数据用来存储 从服务器获取到的 imaginations

  • pages定义了获取第几页

  • per定义了一页获取几个

  • done记录用户在上拉刷新时,是否已经获取完全部 imaginations 资源.

Page({
  data: {
    token: '',
    list: [],
    page: 1,
    per: 10,
    done: false
  }
})

onLoad做了三件事,第一件事是获取token,第二件事是设置data中的token,第三件事就是通过调用this.getData 函数向服务器获取 imaginations 资源

onLoad: function() {
  var _this = this
  util.getInfo(function(info) {
    typeof info === 'object' ? '' : info = JSON.parse(info)
    _this.setData({token: info.token});  
    _this.getData();
  })
},

onPullDownRefresh定义用户下拉刷新时应该做的事,需要注意的是要设置page为1。

onPullDownRefresh: function() {
  this.setData({page: 1})
  this.getData()
},

这里记得要配置下index.json文件。

{
  "enablePullDownRefresh":"true"
}

onReachBottom,这里要注意的是,因为存在下面这个bug,所以需要加一个if判断其token是否有值。

bug: iOS/Android 6.3.30, 首次进入页面,如果页面不满一屏时会触发 onReachBottom ,应为只有用户主动上拉才触发;

判断this.data.done,如果还有资源则调用this.lower(),如果已经全部加完成,则出现提示框。

onReachBottom: function() {
  if(this.data.token) {
    if(!this.data.done) this.lower()
    else {
      wx.showToast({
        title: '没有更多内容',
        icon: 'success',
        duration: 600
      })
    }
  }
},

因为这里涉及到lower函数,我们就来看看,其实也很简单,主要就是需要将其page加1.

lower: function() {
  this.setData({page: this.data.page + 1})
  this.getData()
},

最后,终于到了getData函数,此函数向服务器获取 imaginations 资源。

getData: function() {
  var _this = this
  var token = _this.data.token
  var per = _this.data.per
  var page = _this.data.page
  //构造请求的url
  var apiUrl = Api.imaginations + '?per=' + per + '&page=' + page + '&token=' + token
  //展示加载中的toast
  wx.showToast({
    title: '加载中',
    icon: 'loading',
    duration: 500
  })
  //如果page等于1,则需要将list清空
  if(page === 1) {
    _this.setData({ list: [] });
  }
  //发送请求
  wx.request({
    url: apiUrl,
    method: 'GET',
    success: function(res){
      console.log('获取imaginations成功:', res)
      //如果data为空,说明资源自己全部加在完毕,则需要设置done状态为true
      if(res.data.length === 0) _this.setData({done: true})
      else _this.setData({done: false})
      //这里资源请求成功,需要调用wx.stopPullDownRefresh()
      wx.stopPullDownRefresh()
      //设置list同时,需要对数据进行一点点小的改造,时长转换为字符串格式,语音播放地址path
      _this.setData({list: _this.data.list.concat(res.data.map(function(item){
        item.duration = util.NumberToTime(Math.floor(item.duration/1000))
        item.path = 'https://tinyapp.sparklog.com/static/uploads/' + JSON.parse(item.src).filename
        return item
      }))})
    },
    fail: function() {
      console.error('获取imaginations失败')
    }
  })
},

这就是index.js的全部内容。






免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。