reachBottom.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. module.exports = Behavior({
  2. data: {
  3. loading: false, // 加载状态标志位
  4. list: [],
  5. nullList: false,
  6. grade: '',
  7. pageNo: 1,
  8. totalSize: 0,
  9. noMoreData: false, // 无更多数据置为 false
  10. },
  11. methods: {
  12. async getData(fn, args) {
  13. if (this.data.noMoreData) {
  14. return
  15. }
  16. let params = {
  17. pageNo: this.data.pageNo,
  18. pageSize: 10,
  19. ...args
  20. }
  21. // 加载状态,用于页面中控制加载动画的显示
  22. this.setData({
  23. loading: true,
  24. nullList: false
  25. })
  26. let {
  27. list,
  28. totalSize
  29. } = await fn(params).finally(() => {
  30. // 页面渲染完成后关闭加载动画字段
  31. wx.nextTick(() => {
  32. this.setData({
  33. loading: false
  34. })
  35. });
  36. })
  37. list = [...this.data.list, ...list]
  38. if (list.length == 0) {
  39. this.setData({
  40. nullList: true
  41. })
  42. } else {
  43. this.setData({
  44. nullList: false
  45. })
  46. }
  47. this.setData({
  48. pageNo: ++this.data.pageNo,
  49. list,
  50. totalSize,
  51. noMoreData: list.length >= totalSize
  52. })
  53. },
  54. resetData(data) {
  55. if (this.data.loading) return; // 如果接口已经在请求中,则不重置数据,防止用户持续下拉刷新
  56. this.setData({
  57. loading: false,
  58. list: [],
  59. pageNo: 1,
  60. totalSize: 0,
  61. noMoreData: false,
  62. })
  63. this.loadMore(data); // 调用页面中的接口请求方法
  64. },
  65. },
  66. })