当前位置:   article > 正文

小程序 uniApp 下拉刷新 上拉加载_uniapp上拉刷新下拉加载自定义

uniapp上拉刷新下拉加载自定义

一,小程序 uniApp 下拉刷新 上拉加载

在小程序和uniapp 中 可以通过 <scrooll-view /> 这个组件来实现 下拉刷新 和 上拉加载的功能 。官方文档

  1. 通过配置 scroll-xscroll-y 可以实现 横向 或纵向的滚动

封装需要被刷新的组件 ListView
​
  1. 封装需要被刷新的组件 ListView
  2. <view class="list">
  3. <navigator class="list-item" v-for="item in listData" :key="item.id" :url="item.url">
  4. <view>{{item.content}} </view>
  5. </navigator>
  6. </view>
  7. <view class="loading-text"> {{ finish ? '没有更多数据~' : '正在加载...' }} </view>
  8. api 需求 一般会返回一个列表 包含 limit 条数 page 页数 totalPages 总页数(关键就是要这个总页数,去做判断)
  9. const listData = ref([]) // 存放数据
  10. const pageParams ={page:1,limit:10} // 请求分页数据
  11. const finish = ref(false) // 结束标记
  12. // 请求数据
  13. async function getData() {
  14. if (finish.value) {
  15. return uni.showToast({ icon: 'none', title: '没有更多数据~' })
  16. }
  17. const result = await getListDataApi(pageParams)
  18. guessList.value.push(...result.items)
  19. // 判断总页数是否大于 请求的分页条数
  20. if (result.totalPages > pageParams.page) {
  21. // 大于 继续累加页数
  22. pageParams.page++
  23. } else {
  24. // 小于 停止累加
  25. finish.value = true
  26. }
  27. }
  28. onMounted(() => {
  29. getData()
  30. })
  31. // 封装重置数据方法
  32. const resetData = () => {
  33. pageParams.page = 1
  34. listData.value = []
  35. finish.value = false
  36. }
  37. // 抛出方法
  38. defineExpose({
  39. resetData,
  40. getData,
  41. })

下拉刷新

  1. 配置 refresher-enabled 开启自定义下拉刷新

  2. 配置 refresher-triggered 设置下拉刷新的状态 (true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发)

  3. 配置 @refresherrefresh 触发自定义下拉刷新

  4. 下拉刷新的目的 就是 将数据重置更新 往往需要的操作 就是将 当前页面的数据重置 对于固定的数据 只需要重新发起一次请求 ,对于列表数据 只需要清空之前记录的数据 ,在页面更新时在发起请求

  1. const isTriggered = ref(false) // 下拉刷新状态
  2. <scroll-view
  3.    scroll-y
  4.    refresher-enabled
  5.   :refresher-triggered="isTriggered"
  6. @refresherrefresh="onRefresherrefresh"
  7. >
  8.  
  9.    <ListView ref="listRef"></ListView>
  10.  
  11. </scroll-view>
  12. const isTriggered = ref(false) // 下拉刷新状态
  13. const listRef = ref(null) // 可以访问组件抛出的数据
  14. // 触发下拉刷新 refresherrefresh
  15. async function onRefresherrefresh() {
  16.  // 开启动画 (就那三个 ... 的撒币动画)
  17.  isTriggered.value = true
  18.    
  19.  // 重置猜你喜欢组件数据
  20.  listRef.value.resetData()
  21.  
  22.   // 对其他要下拉更新的数据发起请求
  23. // await Promise.all([getHomeBannerData(), getCategoryData(), getHomeHot()])
  24.  // 关闭动画
  25.  isTriggered.value = false
  26. }

上拉加载

  1. enable-back-to-top 双击标题栏返回顶部

  2. @scrolltolower 滚动到底部/右边,会触发 scrolltolower 事件

 <scroll-view 
    scroll-y
    enable-back-to-top
    @scrolltolower="onScrolltolower"
 >
   
    <ListView ref="listRef"></ListView>
   
 </scroll-view>
​
​
// 上拉加载  只需要 调用组件中 请求列表数据的方法
function onScrolltolower() {
  listRef.value.getData()
}

注意点

需要加上下面这几行 css 不然滚动刷新不触发

<style lang="scss">
// css 要加 不然滚动刷新不触发
page {
  background-color: #f7f7f7;
  height: 100%;
  overflow: hidden;
}
​
.viewport {
  height: 100%;
  display: flex;
  flex-direction: column;
}
​
.scroll-view {
  flex: 1;
  overflow: hidden;
}
</style>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/517205
推荐阅读
相关标签
  

闽ICP备14008679号