前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序首页获取数据给数组赋值,实现加载更多,以及遇到的坑

小程序首页获取数据给数组赋值,实现加载更多,以及遇到的坑

作者头像
蓓蕾心晴
发布2018-08-15 15:30:48
1.7K0
发布2018-08-15 15:30:48
举报
文章被收录于专栏:前端小叙前端小叙
代码语言:javascript
复制
<!-- wxml-->

<view>
  <view class="refreshTip" wx:if="{{refreshCompeleted==true}}">刷新成功</view>
  <news-list-item wx:for="{{newsList}}" news="{{item}}" wx:key="item.id"></news-list-item>
  <view class="weui-loadmore" wx:if="{{loading===true}}">
    <view class="weui-loading"></view>
    <view class="weui-loadmore__tips">加载中</view>
  </view>
  <view class="weui-loadmore" wx:if="{{loadingCompeleted===true}}">
    <view class="weui-loadmore__tips">加载完成</view>
  </view>
  <view class="weui-loadmore weui-loadmore_line" wx:if="{{noData===true}}">
    <view class="weui-loadmore__tips weui-loadmore__tips_in-line">暂无数据</view>
  </view>
</view>

不能直接把后台返回的数组数据赋值到定义的空数组中,一定要concat连接,否则结果是看似是个数组,但是获取到的该数组却为空,导致第一次上拉加载更多的时候是拿到的之前的数组依然是空数组。

代码语言:javascript
复制
var config = require('../../config')

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



Component({

  properties: {

    category: {

      type: String,

      value: "index"

    },

    params: {

      type: String,

      value: ""

    },

  },

  data: {

    newsList: [],

    page: 0,

    size: 10,

    totalPages: 0,

    refreshCompeleted: false,

    loadingCompeleted: false,

    loading: false,

    noData: false

  },

  methods: {

    getList() {

      let that = this;

      that.setData({

        page: 0

      })

      if (that.data.category === "index") {

        util.get(`${config.service.host}/web/news/list_with_pub_info?channelId=${config.channelId}&page=0&size=${that.data.size}`, function(res) {

          res.data.content.filter((value) => {

            return value.createAt = util.formatTimeDistance(new Date(value.createAt))

          })

          let newsList = that.data.newsList.concat(res.data.content);//这里要特别注意,不能直接that.setData({newsList:res.data.content}) ,见下面注释

          that.setData({

            newsList: newsList,

            totalPages: res.data.totalPages,

          })

          if (res.data.content.length = 0) {

            that.setData({

              noData: true

            })

          }

          if (res.data.content.length !== 0 && that.data.page + 1 == that.data.totalPages) {

            that.setData({

              loadingCompeleted: true,

              loading: false,

              noData: false

            })

          }

          setTimeout(function() {

            that.setData({

              refreshCompeleted: true

            })

          }, 1000)

          setTimeout(function() {

            that.setData({

              refreshCompeleted: false

            })

          }, 2000)

        }, function(e) {

          console.log(JSON.stringify(e));

        });

      } else if (that.data.category === "search") {

        util.get(`${config.service.host}/web/news/search_in_channel_with_pub_info?channelId=${config.channelId}&page=${that.data.page}&size=${that.data.size}&q=${that.data.params}`, function(res) {

          res.data.content.filter((value) => {

            value.createAt = util.formatTimeDistance(new Date(value.createAt));

            let keyword = that.data.params;

            let re = new RegExp(keyword, "g");

            value.title = value.title.replace(re, `<span class="keyword">${keyword}</span>`);

            return value

          })

          let newsList = that.data.newsList.concat(res.data.content);

          that.setData({

            newsList: newsList,

            totalPages: res.data.totalPages,

          })

          console.log(res.data.content.length)

          if (res.data.content.length === 0) {

            that.setData({

              noData: true

            })

          }

          if (res.data.content.length !== 0 && that.data.page + 1 == that.data.totalPages) {

            that.setData({

              loadingCompeleted: true,

              loading: false,

              noData: false

            })

          }

          setTimeout(function() {

            that.setData({

              refreshCompeleted: true

            })

          }, 1000)

          setTimeout(function() {

            that.setData({

              refreshCompeleted: false

            })

          }, 2000)

        }, function(e) {

          console.log(JSON.stringify(e));

        });

      } else if (that.data.category === "professor") {

        util.get(`${config.service.host}/web/news/list_by_follow_with_pub_info?pubId=${that.data.params}&page=${that.data.page}&size=${that.data.size}&q=${that.data.params}`, function(res) {

          res.data.content.filter((value) => {

            return value.createAt = util.formatTimeDistance(new Date(value.createAt))

          })

          let newsList = that.data.newsList.concat(res.data.content);

          that.setData({

            newsList: newsList,

            totalPages: res.data.totalPages,

          })

          if (res.data.content.length === 0) {

            that.setData({

              noData: true

            })

          }

          if (res.data.content.length !== 0 && that.data.page + 1 == that.data.totalPages) {

            that.setData({

              loadingCompeleted: true,

              loading: false,

              noData: false

            })

          }

          setTimeout(function() {

            that.setData({

              refreshCompeleted: true

            })

          }, 1000)

          setTimeout(function() {

            that.setData({

              refreshCompeleted: false

            })

          }, 2000)

        }, function(e) {

          console.log(JSON.stringify(e));

        });

      }





    },

    getMoreList: function() {

      let that = this;

      setTimeout(function() {

        if (that.data.page + 1 < that.data.totalPages) {

          that.setData({

            page: that.data.page + 1,

            loading: true

          })

          if (that.data.category === "index") {

            util.get(`${config.service.host}/web/news/list_with_pub_info?channelId=${config.channelId}&page=${that.data.page}&size=${that.data.size}`, function(res) {

              res.data.content.filter((value) => {

                return value.createAt = util.formatTimeDistance(new Date(value.createAt))

              })

              that.setData({

                newsList: that.data.newsList.concat(res.data.content),

                totalPages: res.data.totalPages,

                loading: false

              })

            }, function(e) {

              console.log(JSON.stringify(e));

            });

          } else if (that.data.category === "search") {

            util.get(`${config.service.host}/web/news/search_in_channel_with_pub_info?channelId=${config.channelId}&page=${that.data.page}&size=${that.data.size}&q=${that.data.params}`, function(res) {

              res.data.content.filter((value) => {

                value.createAt = util.formatTimeDistance(new Date(value.createAt));

                let keyword = that.data.params;

                let re = new RegExp(keyword, "g");

                value.title = value.title.replace(re, `<text class="keyword">${keyword}</text>`);

                return value

              })

              that.setData({

                newsList: that.data.newsList.concat(res.data.content),

                totalPages: res.data.totalPages,

                loading: false

              })

            }, function(e) {

              console.log(JSON.stringify(e));

            });

          } else if (that.data.category === "professor") {

            util.get(`${config.service.host}/web/news/list_by_follow_with_pub_info?pubId=${that.data.params}&page=${that.data.page}&size=${that.data.size}&q=${that.data.params}`, function(res) {

              res.data.content.filter((value) => {

                return value.createAt = util.formatTimeDistance(new Date(value.createAt))

              })

              that.setData({

                newsList: that.data.newsList.concat(res.data.content),

                totalPages: res.data.totalPages,

                loading: false

              })

            }, function(e) {

              console.log(JSON.stringify(e));

            });

          }





        } else {

          that.setData({

            loading: false,

            loadingCompeleted: true

          })

        }

      }, 500)

    },

  },

})
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档