# z-paging 使用模版

# ✅ uniapp 插件

编译条件 标题 备注
https://ext.dcloud.net.cn/plugin?id=3935 (opens new window) 【z-paging下拉刷新、上拉加载】插件地址
https://z-paging.zxlee.cn/ (opens new window) 【z-paging下拉刷新、上拉加载】文档

auto-clean-list-when-reload:	默认true
		reload时立即自动清空原list,若立即自动清空,则在reload之后、请求回调之前页面是空白的  


auto-scroll-to-top-when-reload:
		reload时自动滚动到顶部(如果reload时list被清空导致占位消失也可能会自动返回到顶部,因此如果是这种情况还需要将auto-clean-list-when-reload设置为false)


refresher-status.sync:
		绑定下拉刷新状态改变的变量(页面data中声明的值),当下拉刷新状态改变时,此变量会跟着改变(0-默认状态 1.松手立即刷新 2.刷新中 3.刷新成功)


auto-show-back-to-top: 		默认false
		自动显示点击返回顶部按钮 


back-to-top-with-animate:  		默认true
		点击返回顶部按钮返回到顶部时是否展示过渡动画


auto:	默认true
		z-paging mounted后自动调用reload方法(mounted后自动调用接口)


✅ Copy success!

# 基本使用

<template>
	<view class="view-">
		<z-paging ref="paging" v-model="dataList" @query="queryList" :auto-clean-list-when-reload="false"
			:auto-scroll-to-top-when-reload="false" :refresher-status.sync="refresherStatus"
			:auto-show-back-to-top="true" :back-to-top-with-animate="true" :auto="false">

			<template #top>
				<navbarback pageTitle="列表" bg="#fff" type="black"></navbarback>
			</template>
			
			<template #bottom>
			</template>
			
		</z-paging>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				statusBarHeight: getApp().globalData.systemInfo.statusBarHeight,
				dataList: [],
				refresherStatus:null,
				page:1,
				limit:10,
				
				pageV2: 1,				//	当前点击的第几页
				indexV2: 0,				//	当前点击数组里的第几项
				pageScene: -1,			//	-1 首次    0=不需要刷新    1=需要替换列表数据item
				
			}
		},
		onLoad(options) {
			this.$nextTick(()=>{
				this.initListQuery()
			})
		},
		onShow() {
			
		},
		methods: {
			queryList(page, limit) {
				this.page = page
				this.limit = limit
			
				this.getDataList()
			},
			
			initListQuery() {
				this.$refs.paging.reload()
			},
			/**
			 * 为了更新数据
			 * 
			 */
			initListQueryUpdate() {
				console.log('更新当前分页的数据_________________start')
				this.pageV2 = this.getPageV2(this.indexV2, this.limit)
				
				this.getDataList(this.pageV2)
				console.log('更新当前分页的数据_________________end')
			},
			/**
			 * 计算当前点击的页码
			 * 
			 * @param {Object} index
			 * @param {Object} mylimit
			 */
			getPageV2(index, mylimit) {
				if (!mylimit) {
					return 1;
				}
			    // 计算当前是第几页
				return Math.floor(index / mylimit) + 1;
			},
			onClickAddApi() {
				//	需要刷新
				this.pageScene = -1;
				
				this.indexV2 = 0
			},
			async getDataList(pageV2) {
				let dataList = []
				
				try {
					let params = {
						page:pageV2>-1?pageV2:this.page,
						limit:this.limit
					}
					
					let res = await myFollowList(params);
					
					uni.hideLoading()
					
					if (res.code === 0) {
						let resData = res.data
						
						dataList = resData.list
						console.log(resData,'resData')
					}
					
					
				} catch (err) {
					console.log(err,'err')
				}
				
				if (this.$refs.paging) {
					return this.$refs.paging.complete(dataList);
				}

			}
			
		},
	}
</script>

<style lang="scss">
	page {
		background-color: #f2f2f2;
	}

</style>

✅ Copy success!

# 非全屏 的z-paging


<!-- 使用页面滚动演示(nvue)(不建议,在nvue中,使用内置的list组件性能优于页面滚动,参见common-demo-n.nvue) -->
<!-- 注意,在nvue中使用页面滚动时,无法使用z-paging的下拉刷新(因为z-paging在nvue中的下拉刷新使用的是原生refresh组件,它只能在scroller和list中使用) -->
<!-- 若使用页面滚动时需要下拉刷新功能,请在pages.json中设置"enablePullDownRefresh": true开启页面下拉刷新功能 -->
<template>
	<view class="content">
		<z-paging ref="paging" v-model="dataList" use-page-scroll @query="queryList">
			<!-- 需要固定在顶部不滚动的view放在slot="top"的view中,如果需要跟着滚动,则不要设置slot="top" -->
			<!-- 注意!此处的z-tabs为独立的组件,可替换为第三方的tabs,若需要使用z-tabs,请在插件市场搜索z-tabs并引入,否则会报插件找不到的错误 -->
			<template #top>
			</template>
			<view class="item" style="border-bottom: 1px solid red;" v-for="(item,index) in dataList" :key="item.title" @click="itemClick(item)">
				<text class="item-title">{{item.title}}</text>
				<text class="item-detail">{{item.id}}</text>
				<view class="item-line"></view>
			</view>
		</z-paging>
	</view>
</template>

<script>
	// import request from '../../http/request.js'
	// 使用页面滚动时引入此mixin,用于监听和处理onPullDownRefresh等页面生命周期方法(如果全局引入了,就不要这一步,全局引入示例见main.js)
	import ZPMixin from '@/uni_modules/z-paging/components/z-paging/js/z-paging-mixin'
	export default {
		// 注意这一步不要漏掉,必须注册mixins(如果全局引入了,就不要这一步,全局引入示例见main.js)
		mixins: [ZPMixin],
		data() {
			return {
				// v-model绑定的这个变量不要在分页请求结束中自己赋值!!!
				dataList: [],
				tabList: ['测试1','测试2','测试3','测试4'],
				tabIndex: 0
			}
		},
		methods: {
			tabsChange(index) {
				this.tabIndex = index;
				// 当切换tab或搜索时请调用组件的reload方法,请勿直接调用:queryList方法!!
				this.$refs.paging.reload();
			},
			queryList(pageNo, pageSize) {
				// 组件加载时会自动触发此方法,因此默认页面加载时会自动触发,无需手动调用
				// 这里的pageNo和pageSize会自动计算好,直接传给服务器即可
				// 模拟请求服务器获取分页数据,请替换成自己的网络请求
				const params = {
					pageNo: pageNo,
					pageSize: pageSize,
					type: this.tabIndex + 1
				}
				
				let listlist = [
					{
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, {
						id:1001,
					}, 
				]
				this.$refs.paging.complete(listlist);
				return
				request.queryList(params).then(res => {
					// 将请求的结果数组传递给z-paging
					this.$refs.paging.complete(res.data.list);
				}).catch(res => {
					// 如果请求失败写this.$refs.paging.complete(false);
					// 注意,每次都需要在catch中写这句话很麻烦,z-paging提供了方案可以全局统一处理
					// 在底层的网络请求抛出异常时,写uni.$emit('z-paging-error-emit');即可
					this.$refs.paging.complete(false);
				})
			},
			itemClick(item) {
				console.log('点击了', item.title);
			}
		}
	}
</script>

<style>
	.content {
		background-color: white;
	}

	.item {
		flex-direction: row;
		position: relative;
		height: 150rpx;
		align-items: center;
		justify-content: space-between;
		padding: 0rpx 30rpx;
	}

	.item-detail {
		padding: 5rpx 15rpx;
		border-radius: 10rpx;
		font-size: 28rpx;
		color: white;
		background-color: #007AFF;
	}

	.item-line {
		position: absolute;
		bottom: 0;
		left: 0;
		right: 0;
		height: 1px;
		background-color: #eeeeee;
	}
</style>


✅ Copy success!