tr-rewards.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <view class="content">
  3. <!-- :enable-back-to-top="current_index===tab_index" 在微信小程序上可以多加这一句,因为默认是允许点击返回顶部的,但是这个页面有多个scroll-view,会全部返回顶部,所以需要控制是当前index才允许点击返回顶部 -->
  4. <!-- 如果当前页已经加载过数据或者当前切换到的tab是当前页,才展示当前页数据(懒加载) -->
  5. <z-paging v-if="first_loaded || is_currentPage" ref="paging" v-model="data_list" @query="queryList" :fixed="false">
  6. <!-- 如果希望其他view跟着页面滚动,可以放在z-paging标签内 -->
  7. <view class="item" v-for="(item,index) in data_list" :key="index" @click="itemClick(item)">
  8. <view class="item-title">{{item.title}}</view>
  9. <view class="item-detail">{{item.detail}}</view>
  10. <view class="item-line"></view>
  11. </view>
  12. </z-paging>
  13. </view>
  14. </template>
  15. <script setup lang="ts">
  16. import { nextTick, ref, watch } from 'vue';
  17. let data_list = ref([]) //v-model绑定的这个变量不要在分页请求结束中自己赋值!!!
  18. let first_loaded = ref(false) //当前组件是否已经加载过了
  19. let is_currentPage = ref(false) //是否滚动到当前页
  20. const paging = ref(null) //$ref:paging
  21. const props = defineProps({
  22. tab_index: Number, //当前组件的index,也就是当前组件是swiper中的第几个
  23. current_index:Number, // 当前swiper切换到第几个index
  24. })
  25. watch(()=>props.current_index, (new_v,old_v)=>{
  26. if(new_v === props.tab_index){
  27. // 懒加载,当滑动到当前的item时,才去加载
  28. if(!first_loaded.value){
  29. first_loaded.value = true
  30. // 这里需要延迟渲染z-paging的原因是为了避免在一些平台上立即渲染可能引发的底层报错问题
  31. nextTick(()=>{
  32. setTimeout(() => {
  33. is_currentPage.value = true
  34. }, 100);
  35. })
  36. }
  37. }
  38. },{immediate:true})
  39. function queryList(pageNum:number, pageSize:number) {
  40. // console.log('pageNum=',pageNum,'pageSize=',pageSize)
  41. let tem_list = []
  42. for (let i = 0; i < 10; i++) {
  43. let a = {'title':`奖励-${i}`,'detail':`detail${i}`}
  44. tem_list.push(a)
  45. }
  46. setTimeout(()=>{
  47. paging.value.complete(tem_list)
  48. },500)
  49. }
  50. </script>
  51. <style lang="scss">
  52. /* 注意:父节点需要固定高度,z-paging的height:100%才会生效 */
  53. .content {
  54. height: 100%;
  55. background-color: #ffffff;
  56. }
  57. </style>