外观
选项卡带刷新加载
提示
不需要滑动加载请使用 page-tab-list-comm
组件
演示代码
vue
<page-panel title="分类" :fullPage="true" ref="page" :isLoading="pageLoading" >
<template slot="gBody" >
<page-tab-list :enable="stickyEnable" tabRest :tabList="tabList" :mainHeight="mHeight" ref="tabs" :index="0" @startReq="startReq" disableTouch>
<!-- 选项列表数据上方插槽 -->
<view slot="other" class="flex flex-vh-center flex-between py-30 px-32">
类型-1
</view>
<!-- 数据渲染 -->
<template v-slot:dataList="{data,tabIndex}">
<!-- tab 对应列表数据 -->
<view v-if="data && data.length>0" class="px-32">
<template v-for="(book,booIndex) in data" >
<book-lr-item :book="book" imgHeight="204" imgwidth="204" :key="book.id"></book-lr-item>
</template>
</view>
<!-- 空数据 -->
<page-empty v-else></page-empty>
</template>
</page-tab-list>
</template>
</page-panel>
<script>
export default {
data() {
return {
tabList: [{name: '全部',id:''}, {name: '社科',id:'1403618681748156416'}, {name: '文艺',id:'1403618735858872320'}, {name: '少儿',id:'1403618775771869184'}],
// 页面加载
pageLoading : true,
// 内容主体高度
mainHeight : 200,
lastIndex:0,
};
},
onLoad() {
this.pageLoading = false;
if(this.isLogin){
uni.showLoading({
title:'请稍后'
})
}
},
onReady(){
//获取内容高度
this.getContentHeight()
},
methods:{
getContentHeight(){
this.$util.getRefs('page', this, 0, (ref)=>{
ref.getDomSize('pageBody', (e)=>{
// 主体高度 = 页面高度 - 自定义区域高度 tab默认的高度为 80 加上 底部滑块的高度 6 和默认的间隔 20 合计 106 rpx
// 如果自定义区域有 margin 尺寸获取不到请加上这个值,可以利用 uni.upx2px() 转换
this.mHeight = e.height - uni.upx2px(106);
this.initHeight()
});
});
},
initHeight(){
//去掉other插槽的高度 才是内容区域的高度
this.mHeight=this.mHeight - uni.upx2px(110)
// 第一次加载数据 会触发 startReq 回调
this.$refs.tabs.init();
},
//开始请求
startReq(req){
console.log('req',req);
let {isReload,tabIndex,page}=req;
let data={
currentPage:page,
pageSize: 10,
contentTypeId: this.tabList[tabIndex].id ,
isFree: "",
isLimitTimeFree: "" ,
}
//想后台请求数据
queryList(data).then(res=>{
let list=res.data.records||[];
let isnomore=list.length<page*10
//请求成功把数据填充tab
this.$refs.tabs.reqFinish(req,list||[],isnomore)
uni.hideLoading()
}).catch(err=>{
uni.hideLoading()
this.$refs.tabs.onReqErr(isReload)
})
},
}
}
</script>
Attributes
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
otherInfo | 附加信息 | Object | null |
gap | 选项卡距离下方的间隔 | Number,String | 20 |
barWidth | 选项卡宽度 | Number,String | 210 |
index | 选项卡默认选中的索引 | Number | 0 |
tabList | 选项卡数据 | Array | [] |
tabName | 选项卡显示的属性 | String | 'name' |
mainHeight | 内容区高度 | Number | 200 |
isScroll | 选项卡是否滑动 | Boolean | false |
enable | 启用吸顶 | Boolean | true |
tabRest | 点击tab 重新获取数据 | Boolean | false |
Event
事件 | 说明 |
---|---|
startReq | 开启请求数据,回调isReload 是否刷新请求, tabIndex 当前选项索引, page 当前请求页数 |
method
方法 | 说明 |
---|---|
init () | 组件初始化后调用 |
reqFinish (req,reqData,isnomore) | 用于请求成功后把数据返回 |
onReqErr (req) | 请求异常时调用 |
getTabData (tabIndex) | 获取当前tab的数据 |
updataTabData (tabIndex,data) | 更新当前tab的数据 |
solt 插槽传值不生效
针对小程序端: 在清单文件中设置 "scopedSlotsCompiler" : "legacy"
上次更新: