|
@@ -0,0 +1,62 @@
|
|
|
+<template>
|
|
|
+ <view class="content">
|
|
|
+ <!-- :enable-back-to-top="currentIndex===tabIndex" 在微信小程序上可以多加这一句,因为默认是允许点击返回顶部的,但是这个页面有多个scroll-view,会全部返回顶部,所以需要控制是当前index才允许点击返回顶部 -->
|
|
|
+ <!-- 如果当前页已经加载过数据或者当前切换到的tab是当前页,才展示当前页数据(懒加载) -->
|
|
|
+ <z-paging v-if="firstLoaded || isCurrentPage" ref="paging" v-model="dataList" @query="queryList" :fixed="false">
|
|
|
+ <!-- 如果希望其他view跟着页面滚动,可以放在z-paging标签内 -->
|
|
|
+ <view class="item" v-for="(item,index) in dataList" :key="index" @click="itemClick(item)">
|
|
|
+ <view class="item-title">{{item.title}}</view>
|
|
|
+ <view class="item-detail">{{item.detail}}</view>
|
|
|
+ <view class="item-line"></view>
|
|
|
+ </view>
|
|
|
+ </z-paging>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+ import { nextTick, ref, watch } from 'vue';
|
|
|
+
|
|
|
+ let dataList = ref([]) //v-model绑定的这个变量不要在分页请求结束中自己赋值!!!
|
|
|
+ let firstLoaded = ref(false) //当前组件是否已经加载过了
|
|
|
+ let isCurrentPage = ref(false) //是否滚动到当前页
|
|
|
+ const paging = ref(null) //$ref:paging
|
|
|
+
|
|
|
+ const props = defineProps({
|
|
|
+ tabIndex: Number, //当前组件的index,也就是当前组件是swiper中的第几个
|
|
|
+ currentIndex:Number, // 当前swiper切换到第几个index
|
|
|
+ })
|
|
|
+ watch(()=>props.currentIndex, (new_v,old_v)=>{
|
|
|
+ if(new_v === props.tabIndex){
|
|
|
+ // 懒加载,当滑动到当前的item时,才去加载
|
|
|
+ if(!firstLoaded.value){
|
|
|
+ // 这里需要延迟渲染z-paging的原因是为了避免在一些平台上立即渲染可能引发的底层报错问题
|
|
|
+ nextTick(()=>{
|
|
|
+ setTimeout(() => {
|
|
|
+ isCurrentPage.value = true
|
|
|
+ }, 100);
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },{immediate:true})
|
|
|
+
|
|
|
+ function queryList(pageNo:number, pageSize:number) {
|
|
|
+ // console.log('pageNo=',pageNo,'pageSize=',pageSize)
|
|
|
+ let tem_list = []
|
|
|
+ for (let i = 0; i < 10; i++) {
|
|
|
+ let a = {'title':`消费-${i}`,'detail':`detail${i}`}
|
|
|
+ tem_list.push(a)
|
|
|
+ }
|
|
|
+ setTimeout(()=>{
|
|
|
+ paging.value.complete(tem_list)
|
|
|
+ firstLoaded.value = true
|
|
|
+ },500)
|
|
|
+ }
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+ /* 注意:父节点需要固定高度,z-paging的height:100%才会生效 */
|
|
|
+ .content {
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+</style>
|