110 lines
3.6 KiB
Vue
110 lines
3.6 KiB
Vue
<!-- 在使用页面滚动时,在子组件内使用z-paging写法演示 -->
|
||
<template>
|
||
<view class="content">
|
||
<!-- 此时使用了页面的滚动,z-paging不需要有确定的高度,use-page-scroll需要设置为true -->
|
||
<!-- 注意注意!!这里的ref必须设置且必须等于"paging",否则mixin方法无效 -->
|
||
<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>
|
||
<z-tabs @change="tabChange" :list="tabList"></z-tabs>
|
||
</template>
|
||
<!-- 如果希望其他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>
|
||
export default {
|
||
name:"page-default-list",
|
||
data() {
|
||
return {
|
||
// v-model绑定的这个变量不要在分页请求结束中自己赋值!!!
|
||
dataList: [],
|
||
tabList: ['测试1','测试2','测试3','测试4'],
|
||
tabIndex: 0
|
||
}
|
||
},
|
||
methods: {
|
||
tabChange(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
|
||
}
|
||
this.$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);
|
||
},
|
||
|
||
// ---------------- 子组件内实现z-paging的mixin内的相应方法,并转发给z-paging组件 -------------------
|
||
// 以下四个方法内的代码是固定不变的
|
||
reload() {
|
||
this.$refs.paging.reload();
|
||
},
|
||
updatePageScrollTop(scrollTop) {
|
||
this.$refs.paging.updatePageScrollTop(scrollTop);
|
||
},
|
||
doChatRecordLoadMore() {
|
||
this.$refs.paging.doChatRecordLoadMore();
|
||
},
|
||
pageReachBottom() {
|
||
this.$refs.paging.pageReachBottom();
|
||
},
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style>
|
||
/* 这种情况无需确定z-paging的高度,内部元素会自动将其撑高 */
|
||
.item {
|
||
z-index: 1;
|
||
position: relative;
|
||
height: 150rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
padding: 0rpx 30rpx;
|
||
}
|
||
|
||
.item-detail {
|
||
z-index: 1;
|
||
padding: 5rpx 15rpx;
|
||
border-radius: 10rpx;
|
||
font-size: 28rpx;
|
||
color: white;
|
||
background-color: #007AFF;
|
||
}
|
||
|
||
.item-line {
|
||
position: absolute;
|
||
bottom: 0rpx;
|
||
left: 0rpx;
|
||
height: 1px;
|
||
width: 100%;
|
||
background-color: #eeeeee;
|
||
}
|
||
</style>
|